首页 > 代码库 > 拼命拯救自己的ACM
拼命拯救自己的ACM
ACM精度简单题
大数相加
描述
求两个不超过200位的非负整数的和。
输入有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。输出一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
样例输入
2222222222222222222233333333333333333333
样例输出
55555555555555555555
AC代码
#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>using namespace std;#define MAX_LEN 200int 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 else48 cout << "0";49 return 0;50 }
拼命拯救自己的ACM
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。