高精度减法
题目描述
请你用高精度算法求两个非负数的差,这两个数的最长位数为400位。
输入
有多组测试数据,每组数据占一行,分别表示被减数a和减数b,a,b间用空格格开。a,b均为非负数。输入以EOF结束。
样例输入:
9 9
90 990
1900 900
1900 1000
999999999999999999999999999 1
输出
对应每行输入,输出对应的a,b值的差。
样例输出:
0
-900
1000
900
999999999999999999999999998
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
#include<iostream> #include<cstring> #include<cstdio> using namespace std; int main() { char n1[501],n2[501],n[501]; int a[501]={0},b[501]={0},c[501]={0},la,lb,lc,i; while((scanf("%s",n1))!=EOF) { scanf("%s",n2); if(strlen(n1)<strlen(n2)||strlen(n1)==strlen(n2)&&strcmp(n1,n2)<0) { strcpy(n,n1); strcpy(n1,n2); strcpy(n2,n); cout<<"-"; } la=strlen(n1); lb=strlen(n2); for(i=0;i<la;i++)a[la-i]=int(n1[i]-'0'); for(i=0;i<lb;i++)b[lb-i]=int(n2[i]-'0'); i=1; while(i<=la) { if(a[i]<b[i]) { a[i]+=10; a[i+1]--; } c[i]=a[i]-b[i]; i++; } lc=i; while((c[lc]==0)&&(lc>1))lc--; for(i=lc;i>=1;i--)cout<<c[i]; cout<<endl; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); }} |
Subscribe