a+b和a-b

1306: a+b和a-b [模擬]

時間限制: 1 Sec 內存限制: 128 MB

提交: 60 解決: 14 

題目描述

給你兩個數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無法存儲。

題解:兩個數組相加時 大於10向前進1 同時本身減10  相減分情況討論:第一種情況:在第一個數組大於等於第二個數組的長度時若第一個數組減第二個數組後最後一個爲-1  則用第二個數組減第一個數組,同時若爲負數加10 同時下一位減1  若第一個數組小於第二個數組則直接用第二個數組減第一個數組,原理同上。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char a[110],b[110];
int a1[110],b1[110],c1[110];
int main()
{
	int t;
	char cor;
	scanf("%d",&t);
	while(t--){
		scanf("%s %c %s",&a,&cor,&b);
		memset(a1,0,sizeof(a1));
		memset(b1,0,sizeof(b1));
		for(int i=0;i<strlen(a);i++){
			a1[strlen(a)-i-1]=a[i]-'0';
			c1[strlen(a)-i-1]=a[i]-'0';
		}
		for(int i=0;i<strlen(b);i++){
			b1[strlen(b)-i-1]=b[i]-'0';
		}
		int len=max(strlen(a),strlen(b));
		if(cor=='+'){
			for(int i=0;i<len;i++){
				a1[i]=a1[i]+b1[i];
				if(a1[i]>=10){
					int t=a1[i]/10;
					a1[i+1]+=t;
					a1[i]=a1[i]-t*10;
				}
			}
			if(a1[len]!=0) printf("%d",a1[len]);
			for(int i=len-1;i>=0;i--){
				printf("%d",a1[i]);
			}
		}else{
			if(strlen(a)<strlen(b)){
				for(int i=0;i<len;i++){
				b1[i]=b1[i]-a1[i];
					if(b1[i]<0){
						b1[i]+=10;
						b1[i+1]--;
					}
				}
				printf("-");
				int i;
				for(i=len-1;b1[i]==0;i--);
				for(;i>=0;i--){
					printf("%d",b1[i]);
				}
			}
			else{
				for(int i=0;i<len;i++){
					c1[i]=c1[i]-b1[i];
					if(c1[i]<0){
						c1[i]+=10;
						c1[i+1]--;
					}
				}
				if(c1[len]==-1){
					printf("-");
					for(int i=0;i<len;i++){
						b1[i]=b1[i]-a1[i];
						if(b1[i]<0){
							b1[i]+=10;
							b1[i+1]--;
						}
					}
					int i;
					for(i=len-1;b1[i]==0;i--);
					for(;i>=0;i--){
						printf("%d",b1[i]);
					}
				}else{
					int i;
					for(i=len-1;c1[i]==0;i--);
					for(;i>=0;i--){
						printf("%d",c1[i]);
					}
				}
			}
		}
		printf("\n");
	}
	return 0;
}




發佈了36 篇原創文章 · 獲贊 6 · 訪問量 9762
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章