1. 程式人生 > >2736 大整數減法

2736 大整數減法

大整數 har result open urn ems 分析 tin ()

題目來源:
http://bailian.openjudge.cn/practice/2736/
描述
求兩個大的正整數相減的差。
輸入
共2行,第1行是被減數a,第2行是減數b(a > b)。每個大整數不超過200位,不會有多余的前導零。
輸出
一行,即所求的差。
樣例輸入
9999999999999999999999999999999999999
9999999999999
樣例輸出
9999999999999999999999990000000000000
題意描述:
輸入兩行不超過200位的整數表示被減數a和減數b(a > b)
計算並輸出兩大整數的差
解題思路:
先把str1和str2逆置
再一一對應計算,需要借位,結果減一
最後去掉前導零輸出即可
程序代碼:

 1 #include<stdio.h>
 2 const int N=230;
 3 #include<string.h>
 4 void strr(char *str);
 5 int main()
 6 {
 7     char str1[N],str2[N];
 8     int result[N],i,j,l1,l2,l;
 9     while(scanf("%s%s",str1,str2) != EOF)
10     {
11         strr(str1);
12         strr(str2);
13         l1=strlen(str1);
14 l2=strlen(str2); 15 if(l1>=l2) 16 { 17 l=l1; 18 for(i=l2;i<l;i++) 19 str2[i]=0; 20 } 21 if(l==1 && str1[0]==0 && str2[0]==0) 22 { 23 printf("0\n"); 24 continue; 25
} 26 27 memset(result,0,sizeof(result)); 28 for(i=0;i<l;i++) { 29 result[i] += (str1[i]-0) - (str2[i]-0); 30 if(result[i] < 0) 31 { 32 result[i] += 10; 33 result[i+1]--; 34 } 35 } 36 37 for(i=l;i>=0;i--) { 38 if(result[i] > 0) 39 break; 40 } 41 for(j=i;j>=1;j--) 42 printf("%d",result[j]); 43 printf("%d\n",result[0]); 44 } 45 return 0; 46 } 47 void strr(char *str) 48 { 49 int i,l,t; 50 l=strlen(str); 51 for(i=0;i<l/2;i++) 52 { 53 t=str[i]; 54 str[i]=str[(l-1)-i]; 55 str[(l-1)-i]=t; 56 } 57 }

錯誤分析:
1、註意0 - 0的情況,判斷是否為0時與字符‘0’比較

2736 大整數減法