#include<stdio.h> #include<string.h> #include<string> #include<algorithm> #include<iostream> using namespace std; struct bigint { int d[401]; int len; }; bigint change(string a) { bigint c; c.len = a.size(); for (int i = 0; i < 401; i++) { c.d[i] = 0; } for (int i = 0; i < c.len; i++) { c.d[i] = a[i] - '0'; } return c; } bigint add(bigint a, bigint b,int &carry) { bigint c; c.len = 0; int max = a.len > b.len ? a.len : b.len; for (int i = max - 1; i >= 0;i--) { int t = a.d[i] + b.d[i] + carry; c.d[c.len++] = t % 10; carry = t / 10; } return c; } int main() { string s1, s2; string b,d; while (cin>>s1>>s2) { int k = s1.find("."); if (k == -1) { b=""; } else { b=s1.substr(k+1,s1.size()-k); } string a(s1, 0, k); k = s2.find("."); string c(s2, 0, k); if (k == -1) { d = ""; } else { d = s2.substr(k + 1, s2.size() - k); } bigint x = change(b); bigint y = change(d); int carry=0; bigint m = add(x, y, carry); bigint p = change(a); bigint q = change(c); bigint n = add(p, q, carry); if (carry != 0) { n.d[n.len++] = carry; } for (int i = n.len - 1; i >= 0; i--) { printf("%d", n.d[i]); } int flag = 0; for (int i = 0; i < m.len; i++) { if (m.d[i] != 0) { flag = 1; break; } } if (flag) { printf("."); for (int i = m.len - 1; i >= 0; i--) { printf("%d", m.d[i]); } } printf("\n"); } } |
Double click to view unformatted code.