您的位置:首页 > 其它

2736 大整数减法

2017-05-20 23:03 232 查看
题目来源: 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
,str2
;
8     int result
,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’比较
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐