杭电acm1002,该怎么解决
杭电acm1002
杭州电子科技大的1002题 没思路 谁能讲一下思路啊
------解决方案--------------------
直接贴题目呗 让人上哪儿找去
------解决方案--------------------
第一个2 是你输入执行的次数,也就是说可以计算两次加法
这道题的关键在于处理数据溢出.因为第二个例子的数很大,要处理大整数相加
------解决方案--------------------
大数相加嘛,用字符串来处理呗,两个字符串的元素按位相加,注意进位就好了
------解决方案--------------------
直接读入两个字符串,然后从后面到前面想加,进位,然后输出。
或者直接java bigInteger
------解决方案--------------------
杭州电子科技大的1002题 没思路 谁能讲一下思路啊
------解决方案--------------------
直接贴题目呗 让人上哪儿找去
------解决方案--------------------
第一个2 是你输入执行的次数,也就是说可以计算两次加法
这道题的关键在于处理数据溢出.因为第二个例子的数很大,要处理大整数相加
------解决方案--------------------
大数相加嘛,用字符串来处理呗,两个字符串的元素按位相加,注意进位就好了
------解决方案--------------------
直接读入两个字符串,然后从后面到前面想加,进位,然后输出。
或者直接java bigInteger
------解决方案--------------------
- C/C++ code
#include "stdio.h" #include "string.h" #include "malloc.h" int main() { char** res = 0; char s0[1024]; char s1[1024]; size_t len0 = 0; size_t len1 = 0; char* p0 = 0; char* p1 = 0; char* c0 = 0; char* c1 = 0; int cnt = 0; int cy = 0; int i = 0; if (scanf("%d", &cnt) != 1 || cnt <= 0 || cnt > 20) return 1; res = (char**)malloc(sizeof(char*) * cnt); for (i = 0; i < cnt; ++i) { if (scanf("%s%s", s0, s1) != 2) { res[i] = 0; continue; } len0 = strlen(s0); len1 = strlen(s1); if (len0 <= len1) { p0 = s0; p1 = s1; c0 = s0 + len0 - 1; c1 = s1 + len1 - 1; } else { p0 = s1; p1 = s0; c0 = s1 + len1 - 1; c1 = s0 + len0 - 1; } res[i] = (char*)malloc((size_t)(c1 - p1) + len0 + len1 + 16); sprintf(res[i], "%s + %s = ", s0, s1); cy = 0; while (c0 >= p0) { cy = (*c0 - '0') + (*c1 - '0') + cy; if (cy >= 10) { (*c1) = (cy - 10) + '0'; cy = 1; } else { (*c1) = cy + '0'; cy = 0; } --c0; --c1; } while (c1 >= p1) { cy = (*c1 - '0') + cy; if (cy >= 10) { (*c1) = (cy - 10) + '0'; cy = 1; } else { (*c1) = cy + '0'; cy = 0; break; } } sprintf(res[i] + len0 + len1 + 6, "%s%s", cy > 0 ? "1" : "", p1); } for (i = 0; i < cnt; ++i) printf("Case %d:\n%s\n%s", i + 1, res[i] ? res[i] : "", i < cnt - 1 ? "\n" : ""); for (i = 0; i < cnt; ++i) if (res[i]) free(res[i]); free(res); return 0; }
------解决方案--------------------
- C/C++ code
#include <iostream> #include <vector> #include <string> #include <algorithm> using namespace std; vector<int> Add(vector<int> v1, vector<int> v2) { reverse(v1.begin(), v1.end()); reverse(v2.begin(), v2.end()); int maxsize = v1.size() > v2.size() ? v1.size() : v2.size(); vector<int> v3(maxsize); int m = 0; for(int i = 0; i < maxsize; ++i) { int t = m; if (i < v1.size()) t = t + v1[i]; if (i < v2.size()) t = t + v2[i]; m = t / 10; v3[i] = t % 10; } if (m > 0) v3.push_back(m); reverse(v3.begin(),v3.end()); return v3; } int main() { int n; string s1, s2; cin >> s1 >> s2; vector<int> v1(s1.size()), v2(s2.size()); for (int i = 0; i < s1.size(); ++i) { v1[i] = s1[i] - '0'; } for(int i = 0; i < s2.size(); ++i) { v2[i] = s2[i] - '0'; } vector<int> v3 = Add(v1,v2); for(int i = 0; i < v3.size(); ++i) { cout << v3[i]; } cout << endl; while(1); return 0; }