大整数减法
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
求两个大的正整数相减的差。
- 输入
- 共2行,第1行是被减数a,第2行是减数b(a > b)。每个大整数不超过200位,不会有多余的前导零。
- 输出
- 一行,即所求的差。
- 样例输入
-
9999999999999999999999999999999999999 9999999999999
- 样例输出
-
9999999999999999999999990000000000000
代碼實現:
1 #include<cstdio> 2 #include<cstring> 3 using namespace std; 4 int la,lb,sa[300],sb[300]; 5 char a[300],b[300]; 6 bool bj(){ 7 if(la>lb) return 1; 8 if(la<lb) return 0; 9 for(int i=0;i<la;i++){ 10 if(a[i]>b[i]) return 1; 11 if(a[i]<b[i]) return 0; 12 } 13 } 14 int main(){ 15 scanf("%s%s",&a,&b); 16 la=strlen(a);lb=strlen(b); 17 if(bj()){ 18 for(int i=0;i<la;i++) sa[la-i]=a[i]-'0'; 19 for(int i=0;i<lb;i++) sb[lb-i]=b[i]-'0'; 20 sa[0]=la;sb[0]=lb; 21 } 22 else{ 23 printf("-"); 24 for(int i=0;i<lb;i++) sa[lb-i]=b[i]-'0'; 25 for(int i=0;i<la;i++) sb[la-i]=a[i]-'0'; 26 sa[0]=lb;sb[0]=la; 27 } 28 for(int i=1;i<=sa[0];i++){ 29 sa[i]-=sb[i]; 30 if(sa[i]<0){ 31 sa[i]+=10; 32 sa[i+1]--; 33 } 34 } 35 while(!sa[sa[0]]) --sa[0]; 36 for(int i=sa[0];i>0;i--) printf("%d",sa[i]); 37 printf("\n"); 38 return 0; 39 }
。。。