[問題の説明]大きな整数の合計
プログラミング言語でプログラミングする場合、非常に大きな整数または非常に高い演算精度を必要とする整数(大きな整数と呼ばれます)を処理することができます。このような大きな整数は、言語の基本データを使用しますタイプを直接表現することはできません。長整数を処理する一般的な方法は、配列を使用して長整数を格納することです。つまり、比較的大きな整数配列を開き、配列要素は長整数の1ビットを表し、配列要素の操作を通じて長整数の操作をシミュレートします。
大きな整数の場合、C = A + Bを求めます。2つのシーケンステーブルAとBを使用して2つの大きな整数を格納し、シーケンステーブルCを使用して合計結果を格納できます。加算操作を容易にするために、長整数の下位ビットをシーケンステーブルの下端に格納できます。シーケンステーブルの長さは、長整数のビット数を示します。
【入力形式】長整数2桁。
【出力形式】集計結果Cを上位から下位へ出力します。
[入力例]
987654321
99997531
[出力例]
1087651852
[説明]キーボードから長整数を入力すると、通常は文字配列に格納されるため、長整数をセグメントに入力する必要はありません。もちろん、文字を数字。
#include <iostream>
#include <cstdio>
using namespace std;
int ma (int a,int b)
{
if(a>b)
return a;
else
return b;
}
int mi (int a,int b)
{
if(a<b)
return a;
else
return b;
}
int main()
{
char s1[100],s2[100];
int i,j,n1=0,n2=0,m1,m2;
scanf("%s",s1);
scanf("%s",s2);
for(i=0;s1[i];i++)
{
n1++;
}
for(i=0;s2[i];i++)
{
n2++;
}
int a1[n1],a2[n2];
for(i=0;i<n1;i++)
{
a1[i]=s1[i]-'0';
}
for(i=0;i<n2;i++)
{
a2[i]=s2[i]-'0';
}
m2=ma(n1,n2);
m1=mi(n1,n2);
int b[m2],n=0;
for(i=0;i<m2;i++)
{
n1--;
n2--;
if(n1>-1&&n2>-1)
{
b[i]=a1[n1]+a2[n2]+n;
if(b[i]>=10&&i!=m2-1)
{
n=b[i]/10;
b[i]=b[i]%10;
}
else if(b[i]<10&&i!=m2-1)
n=0;
else if(i==m2-1)
{
b[i]=b[i];
}
}
else if(n1<=-1&&n2>-1)
{
b[i]=a2[n2]+n;
if(b[i]>=10&&i!=m2-1)
{
n=b[i]/10;
b[i]=b[i]%10;
}
else if(b[i]<10&&i!=m2-1)
n=0;
else if(i==m2-1)
b[i]=b[i];
}
else if(n2<=-1&&n1>-1)
{
b[i]=a1[n1]+n;
if(b[i]>=10&&i!=m2-1)
{
n=b[i]/10;
b[i]=b[i]%10;
}
else if(b[i]<10&&i!=m2-1)
n=0;
else if(i==m2-1)
b[i]=b[i];
}
}
for(i=m2-1;i>=0;i--)
{
cout<<b[i];
}
return 0;
}