高精度加法
#includeusing namespace std;int x[1000005];int main(){ string a,b; cin>>a>>b; if(a.size() =10) { x[i]-=10; x[i+1]++; } } int len=a.size(); if(x[len+1]>0) len++; for(int i=len; i>=1; i--) printf("%d", x[i]);}
做法:得到两个数字串a,b以后,使a串长度默认比b大,否则交换,然后用x数组倒着装a,b两个数字串,然后相加,大于10的进一位,然后特判有没有长度+1,最后在将x数组倒着输出即可。
高精度减法
#includeusing namespace std;int x[10005];int main(){ string a,b; cin>>a>>b; int flag=0; if(a.size() =1; i--) printf("%d", x[i]); return 0;}
做法:先判断一下被减数和减数的大小关系,如果被减数更小的话用flag记录一下输出时加负号,同时在交换一下a,b,使默认a比b大,然后用x数组倒着装a,然后再倒着减b数组,
然后判断x数组有没有负数,有的话+10,后面一位-1,最后特判一下x数组长度,末尾0要去掉,然后倒着输出即可。
高精度乘法
#includeusing namespace std;int x[5000];int m[5000],n[5000];int main(){ string a,b; cin>>a>>b; for(int i=1; i<=a.size(); i++) m[i]=a[a.size()-i]-'0'; for(int i=1; i<=b.size(); i++) n[i]=b[b.size()-i]-'0'; for(int i=1; i<=a.size(); i++) for(int j=1; j<=b.size(); j++) x[i+j-1]+=m[i]*n[j]; for(int i=1; i<=a.size()+b.size(); i++) { if(x[i]>=10) { x[i+1]+=x[i]/10; x[i]=x[i]%10; } } int len=a.size()+b.size(); while(x[len]==0) { len--; if(len==0) { printf("0"); return 0; } } for(int i=len; i>=1; i--) printf("%d", x[i]);}
做法:先将两个读入的数字字符串倒着装到两个整形数组中,然后模拟乘法,然后每一位数字/10是多少下一位加多少,本位对10取余,最后从末第一个不为零的数字倒着输出即可