题目1198:a+b
来源:互联网 发布:nba淘宝官方旗舰店 编辑:程序博客网 时间:2024/05/16 06:42
- 题目描述:
实现一个加法器,使其能够输出a+b的值。
- 输入:
输入包括两个数a和b,其中a和b的位数不超过1000位。
- 输出:
可能有多组测试数据,对于每组数据,
输出a+b的值。
- 样例输入:
2 610000000000000000000 10000000000000000000000000000000
- 样例输出:
810000000000010000000000000000000
代码:
#include <stdio.h>#include <string.h>char s1[1010],s2[1010];int main() { int i; for(i=0;i<1010;i++) s1[i] = s2[i] = 0; while(scanf("%s %s",s1,s2)!=EOF) { int ex=0,j,k=0; int len1 = strlen(s1); int len2 = strlen(s2); int result[1011]; for(i=len1-1,j=len2-1;i>=0&&j>=0;i--,j--) { int x = s1[i] - '0'; int y = s2[j] - '0'; result[k++] = (x+y+ex)%10; ex = (x+y+ex) / 10; } if(j<0&&i>=0) { while(i>=0) { int x = s1[i] - '0'; result[k++] = (x + ex) % 10; ex = (x+ex) / 10; i--; } } if(i<0&&j>=0) { while(j>=0) { int y = s2[j] - '0'; result[k++] = (y + ex) % 10; ex = (y + ex) / 10; j--; } } if(ex==1) result[k++] = ex; for(i=k-1;i>=0;i--) printf("%d",result[i]); printf("\n"); } return 0;}
1.先将每个字符数字,转换为数字再计算。
2.考虑进位
3.计算单个字符串数字时不要忘了考虑进位
4.最后两个字符串数字都计算完了之后,可能有进位,此时不要忘了加上进位。
另一种方法:
#include <stdio.h>#include <string.h>struct bigInteger { int digit[1000]; int size; void init() { for(int i=0;i<1000;i++) digit[i] = 0; size = 0; } void set(char str[]) { init(); int l = strlen(str); for(int i = l - 1,j=0,t=0,c=1;i>=0;i--) { t += (str[i] - '0') * c; j++; c *= 10; if(j==4 || i==0) { digit[size++] = t; j = 0; t = 0; c = 1; } } } void output() { for(int i=size-1;i>=0;i--) { if(i!=size-1) printf("%04d",digit[i]); else printf("%d",digit[i]); } printf("\n"); } bigInteger operator + (const bigInteger &A) const { bigInteger ret; ret.init(); int carry = 0; for(int i=0;i<A.size||i<size;i++) { int tmp = A.digit[i] + digit[i] + carry; carry = tmp / 10000; tmp %= 10000; ret.digit[ret.size++] = tmp; } if(carry != 0) ret.digit[ret.size++] = carry; return ret; }}a,b,c;char s1[1001],s2[1001];int main() { while(scanf("%s %s",s1,s2)!=EOF) { a.set(s1); b.set(s2); c = a + b; c.output(); } return 0;}
- 题目1198:a+b
- 题目1198:a+b
- 题目1198:a+b
- 题目1198:a+b
- 题目1198:a+b
- 题目1198:a+b
- 60-题目1198:a+b
- 九度OJ题目1198:a+b
- 题目1198:a+b 九度OJ
- 九度 题目1198:a+b
- 九度题目1198:a+b
- A+B题目
- 题目1003:A+B
- 题目1003:A+B
- 题目60:a+b
- 题目1003:A+B
- 题目1010:A + B
- 题目1010:A + B
- mysql常用的操作(二)
- linux
- 分类:决策树——Papers or Articles to read
- Box2d基础知识
- 页面开发,挺不简单
- 题目1198:a+b
- php面向对象(一)
- c和c++的static
- matlab 2011b曲线拟合工具箱cftool的使用
- hardcode 什么是硬编码
- 杭州5.8万人面临饮水难 一村庄居民一月未沐浴
- 小程序(十一)约瑟夫环的问题
- 黑马程序员_委托的实现
- SQL Server 中的常用的系統對象(不定時更新)