ブルーブリッジカップ基礎練習高精度加算

2110 ワード

基礎練習高精度加算
時間制限:1.0 sメモリ制限:512.0 MB
       
問題の説明
2つの整数を入力
a和
b,この2つの整数の和を出力する.
a和
bは100位を超えない.
アルゴリズムの説明
によって
a和
bはいずれも大きいため、言語の標準データ型を直接使用して記憶することはできない.この問題については,一般に配列を用いて処理される.
配列の定義
A,
A[0]記憶用
aのビット、
A[1]記憶用
aの10位は、このように推す.同じ配列で
Bは記憶する
b.
計算#ケイサン#
c = 
a + 
bの場合、まず
A[0]と
B[0]を加算し、キャリーが発生した場合、キャリー(和の10桁)を格納する
r,和の桁数を格納する
C[0]、すなわち
C[0]は(
A[0]+
B[0])%10.そして計算
A[1]と
B[1]を加算した場合、下位の値を上げる
rも加算すると、すなわち
C[1]は
A[1]、
B[1]と
r 3つの数の和.またキャリーが発生した場合でも、新しいキャリーを
rにおいて、和のビットは
C[1]では.このように推すと,すぐに求めることができる
Cのすべてのビット.
最後に
C出力でOKです.
入力フォーマット
入力には2行が含まれ、最初の動作は非負の整数です.
a,第2の挙動の非負の整数
b.2つの整数はいずれも100ビットを超えず、2つの数の最高位は0ではありません.
出力フォーマット
1行出力、表示
a + 
bの値.
サンプル入力
20100122201001221234567890
2010012220100122
サンプル出力
20100122203011233454668012
/*
              ,           ,               ,    
       ,     :      0
     :    ,       ,                           
*/ 
#include  
#include
#include
using namespace std;  
string str1,str2,result;  
void add(){  
    result.clear();  
    int len = min(str1.size(),str2.size());
	int len1 = str1.size()-1,len2 = str2.size()-1; 
    int jin = 0;  
    while(len1>=0&&len2>=0){  
        jin += str1[len1]-'0'+str2[len2]-'0';  
        result.insert(result.begin(),(jin%10)+'0');  
        jin /= 10;
		len1--,len2--;  
    }
    while(len1>-1){
    	jin = str1[len1--]-'0'+jin;
    	result.insert(result.begin(),'0'+jin%10);
    	jin/=10;
	}
	while(len2>-1){
    	jin = str2[len2--]-'0'+jin;
    	result.insert(result.begin(),'0'+jin%10);
    	jin/=10;
	}
   	if(jin>0){
   		result.insert(result.begin(),'0'+jin);
	}
}   
int main(){  
 // freopen("input.txt","r",stdin);  
    cin>>str1>>str2;
//    cout<