POJ 1503 Integer Inquiry
2011-12-30 15:19
148 查看
题目描述:
输入一组以0结尾的超级大数,输出这些超级大数相加的结果。
思路:
题目较为简单,但是如果直接利用数值类型存储组内数据是行不通的,因此利用字符串存储输入数据,计算结果以字符串输出。
输入一组以0结尾的超级大数,输出这些超级大数相加的结果。
思路:
题目较为简单,但是如果直接利用数值类型存储组内数据是行不通的,因此利用字符串存储输入数据,计算结果以字符串输出。
#include <cstdio> #include <cstring> /* * 库函数strrev在本地编译可以通过,但是在OJ编译错误 * 所以还得自己重新编写字符串翻转函数 */ void strlrev(char *s) { char c; int len = strlen(s); for(int i = 0; i < len / 2; i++) { c = s[i]; s[i] = s[len - i - 1]; s[len - i - 1] = c; } } /* * 字符串实现两大数相加 * 结果存储在字符串a中,字符串a初始全为0 * 计算结束,将字符串a翻转即为两数的和 */ void add(char *a, char *b) { strlrev(b); int la = strlen(a); int lb = strlen(b); int i = 0, j = 0, k = 0, s = 0, inc = 0; while(i < la && j < la) { s = (a[i] & 0XF) + (b[j] & 0XF) + inc; a[k++] = (s % 10) + '0'; inc = s / 10; i++; j++; } while(i < la) { s = (a[i] & 0XF) + inc; a[k++] = (s % 10) + '0'; inc = s / 10; i++; } while(j < lb) { s = (b[j] & 0XF) + inc; a[k++] = (s % 10) + '0'; inc = s / 10; j++; } if(inc != 0) a[k++] = inc + '0'; } int main() { char a[150], b[150]; memset(a, 0, sizeof(a)); //初始化字符串a为全零 while(scanf("%s", b) && strcmp(b, "0") != 0) { add(a, b); memset(b, 0, sizeof(b)); //每次计算后要将字符串reset } strlrev(a); printf("%s\n", a); return 0; }
相关文章推荐
- POJ 1503 Integer Inquiry 【大数加法】
- POJ 1503 Integer Inquiry 高精度加法
- POJ 1503 Integer Inquiry
- POJ 1503 Integer Inquiry
- POJ 1503 Integer Inquiry(大数相加)
- POJ-1503-Integer Inquiry-大数加法
- Poj 1503 Integer Inquiry
- 【原】 POJ 1503 Integer Inquiry 大整数加法 解题报告
- POJ 1503 Integer Inquiry(大数相加)
- poj 1503 Integer Inquiry lightbluem
- poj 1503 Integer Inquiry【高精度】
- POJ 刷题系列:1503 Integer Inquiry
- POJ 1503 Integer Inquiry(高精度整数)
- POJ-1503-Integer Inquiry-2013-11-25 23:15:45
- POJ 1503 Integer Inquiry
- POJ 1503 && HDU 1047 Integer Inquiry(高精度)
- Integer Inquiry--POJ 1503
- POJ 1503 Integer Inquiry
- poj 1503 Integer Inquiry
- poj 1503 Integer Inquiry