hpu1306 大数a+b和a-b

    xiaoxiao2021-04-16  33

    题目描述

    给你两个数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; }

    转载请注明原文地址: https://ju.6miu.com/read-672960.html

    最新回复(0)