大数 a+b 和 a-b
发布时间:2021-05-25 20:05:32 所属栏目:大数据 来源:网络整理
导读:a+b和a-b 时间限制:?1 Sec?? 内存限制:?128 MB 提交:?27?? 解决:?10 [ 提交][ 状态][ 讨论版] 题目描述 给你两个数a和b,让你计算a和b的和或者差。 输入 有t组数据,每组数据输入一个正数a,接着输入一个符号('+'或者'-'),再输入一个正数b。注意:a和b
|
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;
}
(编辑:新余站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐


