AOJ_0015 National Budget
あしたじゅけーーん
問題
解法
筆算するみたいにやっていけばいい。
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int MAX_K = 80; char num1[MAX_K + 1]; char num2[MAX_K + 1]; char numS[MAX_K + 1]; int k1, k2; bool plus(){ int t = 0, s; for(int i = MAX_K - 1; i >= 0; i--){ s = num1[i] + num2[i] + t; t = s / 10; numS[i] = s % 10 + '0'; } if(t != 0) return false; return true; } int main(){ int N; char c; scanf("%d", &N); for(int i = 0; i < N; i++){ fill(num1, num1 + MAX_K + 1, 0); fill(num2, num2 + MAX_K + 1, 0); scanf("%c", &c); scanf("%s", num1); scanf("%c", &c); scanf("%s", num2); k1 = strlen(num1), k2 = strlen(num2); for(int i = MAX_K - 1; i >= MAX_K - k1; i--) num1[i] = num1[i - MAX_K + k1] - '0'; for(int i = 0; i < MAX_K - k1; i++) num1[i] = 0; for(int i = MAX_K - 1; i >= MAX_K - k2; i--) num2[i] = num2[i - MAX_K + k2] - '0'; for(int i = 0; i < MAX_K - k2; i++) num2[i] = 0; if(plus()){ int i = 0; while(numS[i] == '0' && i <= MAX_K){ i++; } if(i == MAX_K) printf("0\n"); else printf("%s\n", &numS[i]); }else{ printf("overflow\n"); } } return 0; }
じゅけんがんばる