hdoj 1002 a+b 大數相加 C++


問題描述
我有一個非常簡單的問題。由於兩個整數A和B,你的任務是計算A + B的總和

輸入
在輸入的第一行包含一個整數T(1 <= T <= 20),這意味着測試用例的數量。那么T線跟隨,每行包含兩個正整數,A和B請注意,這個整數是非常大的,這意味着你不應該使用32位的整數處理。你可以假設每個整數的長度不會超過1000。

輸出
對於每個測試案例,你應該輸出兩行。第一行是“case#:”#指的測試用例的數量。第二行是一個公式“A + B = SUM”,總和是指A + B.注意的結果有一定的空間int的方程。兩個測試用例之間輸出一個空行。

樣例輸入
2
1 2
112233445566778899 998877665544332211

樣本輸出
case1:
1 + 2 = 3

case2:
112233445566778899 + 998877665544332211 = 1111111111111111110




#include<iostream>
#include<string>
using namespace std;

int main(){
char a[1001],b[1001];
int lena ,lenb,len,n,c=1,a1[1001],a2[1001],b1[1001];
cin>>n;
while(n--){
cin>>a>>b;
lena=strlen(a);
lenb=strlen(b);
//求他們最大的字符長度
len=lena>=lenb?lena:lenb;
//將a 和b 的值逆序賦值給a1,b1
for (int i = 0; i < lena; i++)
{
a1[i]=a[lena-1-i]-'0';
}
for (int i = 0; i < lenb; i++)
{
b1[i]=b[lenb-1-i]-'0';
}
//不足最長位的數進行最高位補零,為了最高位的進位在len+1位上填0
for (int i = lena; i <= len; i++)
{
a1[i]=0;
}
for (int i = lenb; i <= len; i++)
{
b1[i]=0;
}
//進行對應位數相加
for (int i = 0; i <= len; i++)
{
a2[i]=a1[i]+b1[i];
}
//判斷是否有進位,有的加后一位加一
for (int i = 0; i < len; i++)
{
if(a2[i]>=10)
{a2[i+1]=a2[i+1]+1;
a2[i]=a2[i]%10;
}
}
//結果輸出:
cout<<"Case "<<c<<":"<<endl;
c++;

//注意要是用數組輸出時應該進行倒序輸出才是正數
for (int i = 0; i < lena; i++)
{
cout<<a[i];
}
cout<<" "<<"+"<<" ";
for (int i = 0; i < lenb; i++)
{
cout<<b[i];
}
cout<<" "<<"="<<" ";
//如果最高位有進位的話輸出
if(a2[len]>0)
cout<<a2[len];
for (int i = len-1; i >=0; i--)
{
cout<<a2[i];
}
cout<<endl;
if(n>0)
cout<<endl;
}
return 0;
}

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com