给你两个数a和b,让你计算a和b的和或者差。
hpu1306 大数a+b和a-b
发布时间:2020-12-14 03:14:57 所属栏目:大数据 来源:网络整理
导读:题目描述 给你两个数a和b,让你计算a和b的和或者差。 输入 有t组数据,每组数据输入一个正数a,接着输入一个符号('+'或者'-'),再输入一个正数b。 a和b的位数都小于100位。 输出 若是'+',输出两个数之和,若是'-',输出两数之差。 样例输入 412345 + 123451
题目描述输入有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,sizeof(a));
memset(b,sizeof(b));
memset(str3,sizeof(str3));
memset(str4,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("0n");
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;
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
