1 // hdu 1002 2 // high precision 3 // Dec.28 2014 4 5 #include <cstdio> 6 #include <cstring> 7 #include <algorithm> 8 9 #define MaxL 1111 10 11 int T, a[MaxL], b[MaxL], s[MaxL], a_len, b_len, s_len; 12 char str_a[MaxL], str_b[MaxL]; 13 14 int main(int argc, char const *argv[]) 15 { 16 scanf("%d",&T); 17 for(int case_num = 1; case_num <= T; ++case_num){ 18 a_len = b_len = 0; 19 // get big number by character string as buffer 20 scanf("%s", str_a); 21 scanf("%s", str_b); 22 memset(a, 0, sizeof(a)); 23 memset(b, 0, sizeof(b)); 24 memset(s, 0, sizeof(s)); 25 // read the number into int array in reverse order 26 for(int i = strlen(str_a)-1; i >= 0; --i) 27 a[++a_len] = str_a[i] - ‘0‘; 28 for (int i = strlen(str_b)-1; i >= 0; --i) 29 b[++b_len] = str_b[i] - ‘0‘; 30 // s_len is the longer one between a and b 31 s_len = std::max(a_len, b_len); 32 int carry = 0; 33 34 for(int i = 1; i <= s_len; ++i){ 35 int temp = a[i] + b[i] + carry; 36 carry = temp / 10 ; 37 s[i] = temp % 10; 38 } 39 if(carry > 0) 40 s[++s_len] = carry; 41 if(case_num > 1) 42 printf("\n"); 43 printf("Case %d:\n%s + %s = ", case_num, str_a, str_b); 44 for(int i = s_len; i > 0; --i) 45 printf("%d", s[i]); 46 printf("\n"); 47 } 48 return 0; 49 }
时间: 2024-12-15 00:07:39