大数 a+b 和 a-b
发布时间:2021-05-25 11:51:19 所属栏目:大数据 来源:网络整理
导读:a+b和a-b 时间限制:? 1 Sec?? 内存限制:? 128 MB 提交:? 27?? 解决:? 10 [ 提交][ 状态][ 讨论版] 题目描述 给你两个数a和b,让你计算a和b的和或者差。 输入 有t组数据,每组数据输入一个正数a,接着输入一个符号('+'或者'-'),再输入一个正数b。注意:a和
a+b和a-b时间限制:?1 Sec?? 内存限制:?128 MB提交:?27?? 解决:?10 [ 提交][ 状态][ 讨论版] 题目描述给你两个数a和b,让你计算a和b的和或者差。 输入有t组数据,每组数据输入一个正数a,接着输入一个符号('+'或者'-'),再输入一个正数b。注意:a和b很大,用int或者long long 是不够存的。a和b的位数都小于100位(^_^)。 输出若是'+',输出两个数之和,若是'-',输出两数之差。样例输入412345 + 1234512345 + 352345 - 1234512 - 123样例输出2469012380-10000-111数组看准就行(每次都把数组弄反,浪费时间啊!!!) 代码如下: #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int max(int a,int b) { if (a>b) return a; return b; } int main() { char a[111],b[111]; int c[111]; int i; int num; char op[3]; int u; int l1,l2; scanf ("%d",&u); while (u--) { memset (c,sizeof (c)); scanf ("%s %s %s",a,op,b); l1 = strlen(a); l2 = strlen(b); num = 0; if (op[0] == '+') { l1--; l2--; for (;l1 != -1 || l2 != -1;) { if (l1 == -1 && l2 != -1) { c[num] += b[l2--] - '0'; if (c[num] >= 10) { c[num+1]++; c[num] -= 10; } num++; } else if (l1 != -1 && l2 == -1) { c[num] += a[l1--] - '0'; if (c[num] >= 10) { c[num+1]++; c[num] -= 10; } num++; } else { c[num] += a[l1--] - '0' + b[l2--] - '0'; if (c[num] >= 10) { c[num+1]++; c[num] -= 10; } num++; } } } //加法终于对了 = = else { if (l1 == l2) { int x; x = strcmp (a,b); if (x == 0) printf ("0n"); else if (x == 1) { l1--; l2--; for (;l1 != -1 || l2 != -1;) { if (l1 != -1 && l2 == -1) { c[num++] += a[l1--] - '0'; } else { c[num] += a[l1--] - '0' -(b[l2--] - '0'); if (c[num] < 0) { c[num+1]--; c[num] += 10; } num++; } } } else { l1--; l2--; printf ("-"); for (;l1 != -1 || l2 != -1;) { if (l1 == -1 && l2 != -1) { c[num++] += b[l2--] - '0'; } else { c[num] += b[l2--] - '0' -(a[l1--] - '0'); if (c[num] < 0) { c[num+1]--; c[num] += 10; } num++; } } } } else if (l1 > l2) { l1--; l2--; for (;l1 != -1 || l2 != -1;) { if (l1 != -1 && l2 == -1) { c[num++] += a[l1--] - '0'; } else { c[num] += a[l1--] - '0' -(b[l2--] - '0'); if (c[num] < 0) { c[num+1]--; c[num] += 10; } num++; } } } else { l1--; l2--; printf ("-"); for (;l1 != -1 || l2 != -1;) { if (l1 == -1 && l2 != -1) { c[num++] += b[l2--] - '0'; } else { c[num] += b[l2--] - '0' -(a[l1--] - '0'); if (c[num] < 0) { c[num+1]--; c[num] += 10; } num++; } } } } for (i = 100 ; i >= 0 ; i--) if (c[i] != 0) break; for (;i >= 0 ; i--) printf ("%d",c[i]); printf ("n"); } return 0; } (编辑:广西网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐