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,0,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;
}