给你两个数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; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |