高精加
计算a加b的值,a,b皆为不超过1000位的正整数。
#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
string s1,s2;
int a[1005],b[1005],c[1005];
void init(){
cin>>s1>>s2;
reverse(s1.begin(),s1.end());
reverse(s2.begin(),s2.end());
a[0]=s1.size();
b[0]=s2.size();
for(int i=0;i<a[0];i++){
a[i+1]=s1[i]-'0';
}
for(int i=0;i<b[0];i++){
b[i+1]=s2[i]-'0';
}
}
void add(){
c[0]=max(a[0],b[0]);
for(int i=1;i<=c[0];i++){
c[i]+=a[i]+b[i];
if(c[i]>9){
c[i+1]++;
c[i]-=10;
}
}
if(c[c[0]+1]){
c[0]++;
}
while(c[c[0]]==0&&c[0]>1){
c[0]--;
}
}
void print(){
for(int i=c[0];i>=1;i--){
cout<<c[i];
}
}
int main(){
init();
add();
print();
return 0;
}
高精减
计算a减b的值,a,b皆为不超过1000位的非负整数。
#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
string s1,s2;
int a[1005],b[1005],c[1005];
bool f(){
if(s1.size()>s2.size())return true;
if(s1.size()<s2.size())return false;
for(int i=0;i<s1.size();i++){
if(s1[i]<s2[i]){
return false;
}
}
return true;
}
void init(){
cin>>s1>>s2;
if(f()==false){
cout<<"-";
swap(s1,s2);
}
reverse(s1.begin(),s1.end());
reverse(s2.begin(),s2.end());
a[0]=s1.size();
b[0]=s2.size();
for(int i=0;i<a[0];i++){
a[i+1]=s1[i]-'0';
}
for(int i=0;i<b[0];i++){
b[i+1]=s2[i]-'0';
}
}
void min(){
c[0]=max(a[0],b[0]);
for(int i=1;i<=c[0];i++){
if(a[i]<b[i]){
a[i+1]--;
a[i]+=10;
}
c[i]=a[i]-b[i];
}
while(c[c[0]]==0&&c[0]>1){
c[0]--;
}
}
void print(){
for(int i=c[0];i>=1;i--){
cout<<c[i];
}
}
int main(){
init();
min();
print();
return 0;
}
高精乘
计算a乘b的值,a,b皆为不超过1000位的非负整数。
#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
string s1,s2;
int a[1005],b[1005],c[1005];
void init(){
cin>>s1>>s2;
reverse(s1.begin(),s1.end());
reverse(s2.begin(),s2.end());
a[0]=s1.size();
b[0]=s2.size();
for(int i=0;i<a[0];i++){
a[i+1]=s1[i]-'0';
}
for(int i=0;i<b[0];i++){
b[i+1]=s2[i]-'0';
}
c[0]=a[0]+b[0];
}
void time(){
for(int i=1;i<=a[0];i++){
for(int j=1;j<=b[0];j++){
c[i+j-1]+=a[i]*b[j];
if(c[i+j-1]>9){
c[i+j]+=c[i+j-1]/10;
c[i+j-1]%=10;
}
}
}
while(c[c[0]]==0&&c[0]>1){
c[0]--;
}
}
void print(){
for(int i=c[0];i>=1;i--){
cout<<c[i];
}
}
int main(){
init();
time();
print();
return 0;
}
求2的n次方(0<=n<=100)
#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
int n;
int a[120]={1,1};
void power(){
for(int i=1;i<=a[0];i++){
a[i]*=2;
}
for(int i=1;i<=a[0];i++){
if(a[i]>=10){
a[i+1]+=a[i]/10;
a[i]%=10;
}
if(i==a[0]&&a[i+1]!=0)a[0]++;
}
}
void in(){
cin>>n;
for(int i=1;i<=n;i++){
power();
}
}
void print(){
for(int i=a[0];i>=1;i--){
cout<<a[i];
}
}
int main(){
in();
print();
return 0;
}
高精度乘单精度,a乘b。 a是一个很大的非负整数,但不超过240位,b是一个非负整数,不超过10000,求a乘b。
#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
string a;
int b,ans[250];
void in(){
cin>>a>>b;
reverse(a.begin(),a.end());
for(int i=0;i<a.size();i++){
ans[i+1]=a[i]-'0';
}
for(int i=0;i<a.size();i++){
ans[i+1]*=b;
}
ans[0]=a.size();
for(int i=1;i<=ans[0];i++){
if(ans[i]>9){
ans[i+1]+=ans[i]/10;
ans[i]%=10;
}
if(ans[ans[0]+1]!=0)ans[0]++;
}
while(ans[ans[0]]==0&&ans[0]>1){
ans[0]--;
}
}
void print(){
for(int i=ans[0];i>=1;i--){
cout<<ans[i];
}
}
int main(){
in();
print();
return 0;
}
高精除
计算a除以b的值,a,b皆为不超过1000位的非负整数,输出商和余数
#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
string s;
int x,y,k=1;
int a[1005],b[1005],c[1005];
void init(){
cin>>s>>y;
if(y==0){
cout<<"Error";
exit(0);
}
a[0]=s.size();
b[0]=s.size();
for(int i=0;i<s.size();i++){
a[i+1]=s[i]-'0';
}
a[0]=s.size();
c[0]=a[0];
}
void div(){
for(int i=1;i<=c[0];i++){
x=x*10+a[i];
c[i]=x/y;
x%=y;
}
while(c[k]==0)k++;
}
void print(){
for(int i=k;i<=c[0];i++){
cout<<c[i];
}
cout<<"......";
cout<<x;
}
int main(){
init();
div();
print();
return 0;
}
请从键盘读入一个高精度整数a(不超过100位),再读入另一个单精度整数b(b不超过8位),请求出a除以b得到的商和余数
#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
string a,ans;
int b,t,x;
int main(){
cin>>a>>b;
for(int i=0;i<a.size();i++){
x=x*10+a[i]-'0';
ans+=x/b+'0';
x%=b;
}
while(ans[t]=='0'&&ans.size()>1)ans.erase(t,1);
cout<<ans;//商
cout<<endl<<x;//余数
return 0;
}
标签:高精度,int,s2,s1,ans,1005,include
From: https://www.cnblogs.com/hnzzlxs01/p/16655923.html