1. 程式人生 > >藍橋杯 演算法提高 大數加法

藍橋杯 演算法提高 大數加法

  演算法提高 大數加法   時間限制:1.0s   記憶體限制:256.0MB 問題描述   輸入兩個正整數a,b,輸出a+b的值。 輸入格式   兩行,第一行a,第二行b。a和b的長度均小於1000位。 輸出格式   一行,a+b的值。 樣例輸入 4
2 樣例輸出 6 這道題注意99+999或者999+999 上限加一的問題。
#include<iostream>
#include<string> 
using namespace std;
int main()
{
	string a,b;
	int ans[1005];       //用來儲存相加後的結果 
	cin >>a>>b;
	int alen=a.length(),blen=b.length(),i,j;
	if(alen<blen){        //為了防止溢位,我先給他們的前導都加了一個0
		for(i=0;i<=blen-alen;i++)
		a="0"+a;
		
		b="0"+b;     
	}
	else if(alen>blen){      //為了防止溢位,我先給他們的前導都加了一個0
		for(i=0;i<=alen-blen;i++)
		b="0"+b;
		
		a="0"+a;
	}
	else {           //為了防止溢位,我先給他們的前導都加了一個0
		a="0"+a;
		b="0"+b;
	}
//	cout <<a<<endl<<b<<endl;
	int k=0;           
	for(i=a.length()-1;i>=0;i--){ //從低位開始相加 
		int t=(a[i]-'0')+(b[i]-'0');
		if(t>9){                 
			a[i-1]++;       //大於9,則,大位加一。 
			t-=10;            //本位-10 
		}
		ans[k++]=t;   //儲存結果。 
	}
	if(ans[k-1]==0)        //如果第一位數是0,即沒有溢位,則位數下移一位。 
	k=k-1;
	for(i=k-1;i>=0;i--)     //低位相加,倒序輸出。 
	cout <<ans[i];
	return 0;
}