题目描述
给你两个数a和b,让你计算a和b的和或者差。
输入
有t组数据,每组数据输入一个正数a,接着输入一个符号('+'或者'-'),再输入一个正数b。
a和b的位数都小于100位。
输出
若是'+',输出两个数之和,若是'-',输出两数之差。
样例输入
4
12345 + 12345
12345 + 35
2345 - 12345
12 - 123
样例输出
24690
12380
-10000
-111
提示
注意:a和b很大,用int或者long long无法存储。
博文不足,模拟个水题练练代码;
#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#define max_n 1010
using namespace std;
char str1[max_n],str2[max_n];
int a[max_n],b[max_n],str3[max_n],str4[max_n];
int main()
{
int t;
char ch;
scanf("%d",&t);
getchar();
while(t--)
{
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(str3,0,sizeof(str3));
memset(str4,0,sizeof(str4));
scanf("%s %c %s",str1,&ch,str2);
int len1=strlen(str1);
int len2=strlen(str2);
for(int i=0;i<len1;i++)
str3[i]=str1[len1-i-1]-'0';
for(int i=0;i<len2;i++)
str4[i]=str2[len2-i-1]-'0';
if(ch=='+')
{
int len=max(len1,len2);
for(int i=0;i<max(len1,len2);i++)
{
a[i]+=str3[i]+str4[i];
if(a[i]>=10 && i!=max(len1,len2)-1)
{
a[i]%=10;
a[i+1]=1;
}
if(i==max(len1,len2)-1 && a[i]>=10)
{
a[i]%=10;
a[len]=1;
len++;
}
}
for(int i=len-1;i>=0;i--)
printf("%d",a[i]);
}
else
{
if(!strcmp(str1,str2))
{
printf("0\n");
continue;
}
if(len1<len2 || (len1==len2 && strcmp(str1,str2)<0))
{
for(int i=0;i<len2;i++)
{
a[i]+=str4[i]-str3[i];
if(a[i]<0)
{
a[i+1]=-1;
a[i]+=10;
}
}
bool flag=false;
printf("-");
for(int i=len2-1;i>=0;i--)
{
if(a[i]!=0)
flag=true;
if(flag)
printf("%d",a[i]);
}
}
else
{
for(int i=0;i<len1;i++)
{
a[i]+=str3[i]-str4[i];
if(a[i]<0)
{
a[i+1]=-1;
a[i]+=10;
}
}
bool flag=false;
for(int i=len1-1;i>=0;i--)
{
if(a[i]!=0)
flag=true;
if(flag)
printf("%d",a[i]);
}
}
}
printf("\n");
}
return 0;
}