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 ("0\n"); 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; }