2736 大整数减法

题目来源:
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’比较

时间: 2024-11-10 00:16:52

2736 大整数减法的相关文章

Ac日记——大整数减法 openjudge 1.6 11

11:大整数减法 总时间限制:  1000ms 内存限制:  65536kB 描述 求两个大的正整数相减的差. 输入 共2行,第1行是被减数a,第2行是减数b(a > b).每个大整数不超过200位,不会有多余的前导零. 输出 一行,即所求的差. 样例输入 9999999999999999999999999999999999999 9999999999999 样例输出 9999999999999999999999990000000000000 思路: 模拟: 来,上代码: #include<s

关于C语言实现大整数减法的修正

在北京航空航天大学出版社出版的丁海军老师主编的<程序设计基础(C语言)>第236页,我看到了一个大整数减法的的算法实现,试验了这样一组数据: as="99999";bs="100004"; 结果: rs=-1&1&5请按任意键继续. . . 多次调试,我发现了一个问题: 当需要向高位借一时,如果高位为零,那么高位做减一操作,高位存储的ASCII值就变成了255,这样,接下来的运算就向着我不能预知的方向发展了.于是,我在修改了处理错位时的代

JavaScript实现大整数减法

继上一篇博文写了大整数加法之后,我又模拟上篇博文的算法,自己实现了大整数减法. 大整数减法相对于加法来说,稍微复杂一点.由于要考虑一些情况: 1. 两个数相减,可能会出现结果为正.负和0三种情况: 2. 会出现借位的情况,而且还要考虑最高位时有没有借位. 实现代码如下: function subString(a,b) { //将字符串a和b补全成同等长度 while (a.length < b.length){ a = '0' + a; } while (b.length < a.length

1-6-11:大整数减法

描述 求两个大的正整数相减的差. 输入共2行,第1行是被减数a,第2行是减数b(a > b).每个大整数不超过200位,不会有多余的前导零.输出一行,即所求的差.样例输入 9999999999999999999999999999999999999 9999999999999 样例输出 9999999999999999999999990000000000000 1 #include <stdio.h> 2 #include<string.h> 3 int a[201]={0},

ocrosoft Contest1316 - 信奥编程之路~~~~~第三关 问题 L: 大整数减法

http://acm.ocrosoft.com/problem.php?cid=1316&pid=11 题目描述 求两个大的正整数相减的差. 输入 共2行,第1行是被减数a,第2行是减数b(a > b).每个大整数不超过200位,不会有多余的前导零. 输出 一行,即所求的差. 样例输入 9999999999999999999999999999999999999 9999999999999 样例输出 9999999999999999999999990000000000000 代码: #incl

OJ 大整数减法

描述 求两个大的正整数相减的差. 输入 共2行,第1行是被减数a,第2行是减数b(a > b).每个大整数不超过200位,不会有多余的前导零. 输出 一行,即所求的差. 样例输入 9999999999999999999999999999999999999 9999999999999 样例输出 9999999999999999999999990000000000000 code: #include<iostream> #include<cstdio> #include<s

1169:大整数减法

传送门:http://ybt.ssoier.cn:8088/problem_show.php?pid=1169 [题目描述] 求两个大的正整数相减的差. [输入] 共2行,第1行是被减数a,第2行是减数b(a > b).每个大整数不超过200位,不会有多余的前导零. [输出] 一行,即所求的差. [输入样例] 9999999999999999999999999999999999999 9999999999999 [输出样例] 99999999999999999999999900000000000

大整数减法(超过整形的表示范围)

算法思想:预处理输入的整数字符串,去掉开头的‘0’,然后减法操作,减法操作过程中,如果被减数小于减数,则交换两个数 赋值给被减数和减数变量,始终保持 大数减小数.最后 再 根据 是否交换赋值 来 确定正负. 代码实现: 1 #include<iostream> 2 #include<string> 3 using namespace std; 4 5 //去掉字符开头的0 6 void processStr(string &str) 7 { 8 if(str.size()&

大整数减法

#include<cmath> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; const int maxn = 2000; int a[maxn]; int b[maxn]; int c[maxn]; char s[maxn]; char t[maxn]; char n[maxn]; int main(v