大整数减法

总时间限制: 
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 }

。。。

posted @ 2016-12-10 14:19  J_william  阅读(795)  评论(0编辑  收藏  举报