ACM精度简单题
大数相加
描述
求两个不超过200位的非负整数的和。
输入有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。输出一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
样例输入
22222222222222222222 33333333333333333333
样例输出
55555555555555555555 AC代码
#include<iostream> #include<cstdio> #include<string> #include<cstring> #include<algorithm> using namespace std; #define MAX_LEN 200 int an1[MAX_LEN + 10]; int an2[MAX_LEN + 10]; char szLine1[MAX_LEN + 10]; char szLine2[MAX_LEN + 10]; int main() { cin >> szLine1; cin >> szLine2; int i, j; memset(an1, 0, sizeof(an1)); memset(an2, 0, sizeof(an2)); int len1 = strlen(szLine1); int len2 = strlen(szLine2); int maxx = max(len1, len2) + 1; for (i = len1 - 1, j = 0; i >= 0; i--){ an1[j++] = szLine1[i] - ‘0‘; } for (i = len2-1,j=0; i>=0 ; i--){ an2[j++] = szLine2[i] - ‘0‘; } for (j = 0; j < maxx; j++){ an1[j] += an2[j]; if (an1[j] >= 10){ an1[j] -= 10; an2[j + 1]++; } } for (i = maxx; (i >= 0) && (an1[i] == 0); i--); if (i >= 0) for (; i >= 0; i--) cout << an1[i]; else cout << "0"; return 0; }
大数乘法
算法思想:每个位相乘的结果放在一个位置上,错位叠加后,对于大于10的部分,十位加到前面,保留个位。
AC代码:
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<string> 5 #include<cstring> 6 #define MAX_LEN 200 7 using namespace std; 8 9 char s1[MAX_LEN + 10]; 10 char s2[MAX_LEN + 10]; 11 int an1[MAX_LEN + 10]; 12 int an2[MAX_LEN + 10]; 13 int ans[MAX_LEN * 2 + 10]; 14 15 int main() 16 { 17 cin >> s1; 18 cin >> s2; 19 memset(an1, 0, sizeof(an1)); 20 memset(an2, 0, sizeof(an2)); 21 memset(ans, 0, sizeof(ans)); 22 int len1 = strlen(s1); 23 int len2 = strlen(s2); 24 int maxx = len1 + len2 + 1; 25 int i, j; 26 for (i = 0, j = len1 - 1; j>=0; j--){ 27 an1[i++] = s1[j] - ‘0‘; 28 } 29 for (i = 0, j = len2 - 1; j >= 0; j--){ 30 an2[i++] = s2[j] - ‘0‘; 31 } 32 for (i = 0; i < len2; i++){ 33 for (j = 0; j < len1; j++){ 34 ans[i + j] += an2[i] * an1[j]; 35 } 36 } 37 for (i = 0; i < maxx; i++){ 38 if (ans[i] >= 10){ 39 ans[i + 1] += ans[i] / 10; 40 ans[i] %= 10; 41 } 42 } 43 for (i = maxx; (ans[i] == 0 && (i >= 0)); i--); 44 if (i >= 0) 45 for (; i >= 0; i--) 46 cout << ans[i]; 47 else 48 cout << "0"; 49 return 0; 50 }
时间: 2024-10-11 11:43:23