1. 程式人生 > >noi-1982-大整數加法

noi-1982-大整數加法

10:大整數加法

總時間限制: 
1000ms 
記憶體限制: 
65536kB
描述

求兩個不超過200位的非負整數的和。

輸入
有兩行,每行是一個不超過200位的非負整數,可能有多餘的前導0。
輸出
一行,即相加後的結果。結果裡不能有多餘的前導0,即如果結果是342,那麼就不能輸出為0342。
樣例輸入
22222222222222222222
33333333333333333333
樣例輸出
55555555555555555555
來源
程式設計實習2007
//noi_1982
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<iomanip>

using namespace std;

int c[205]={0},d[205]={0};

void initial(int a[]){
	string s;
	cin>>s;
	a[0]=s.length();
	for(int i=1;i<=a[0];i++){
		a[i]=s[a[0]-i]-'0';
	}
	for(int i=a[0];i>=1;i--){
		if(a[i]==0) a[0]--;
		else break;
	}
}

void printa(int a[]){
	if(a[0]==0) {
		cout<<0;
		return;
	}
	for(int i=1;i<=a[0];i++){
		cout<<a[a[0]+1-i];
	}
//	cout<<endl;
}

void plusa(int a[],int b[]){
	if(b[0]>a[0]) a[0]=b[0];
	for(int i=1;i<=a[0];i++){
		a[i]=a[i]+b[i];		
		a[i+1]+=a[i]/10;		
		a[i]%=10;		
	}	
	if(a[a[0]+1]) a[0]++;
}

int main(){
	initial(c);
	initial(d);
	plusa(c,d);
	printa(c);
	return 0;
}

要考慮結果為零的情況,還有要去除前導零。