题目描述
又到了ACM校赛的时候了,SY想要秀一下他的编程能力,他用汇编语言编写了一个2数相加的加法程序,但是出乎意料的是,计算机把它输入的数看做是16进制的数(其实就是没有调整成BCD码),然后给出了一个16进制的答案,幸好SY还存有他的原数据,现在给你原来的数据,请你帮他算出正确答案,当然顺便也输出电脑给出的答案吧。(所有的数据都在int范围内,且非负)
输入
第一行输入一个t,表示有t组数据。
接下来有t行,每行包含两数,表示两个要相加的数。
输出
输出两行,第一行输出正确答案,第二行输出电脑给出的答案
样例输入
2 56 17 10 2
样例输出
73 6D 12 12
#include <bits/stdc++.h>
using namespace std;
int main(){
int t,a,b,ah,bh,ch;
cin>>t;
while(t--)
{
ah=0;bh=0;
cin>>a>>b;
cout<<a+b<<endl;
int i=0;
while(a>0)
{
ah+=(a%10)*pow(16,i);
i++;a=a/10;
}
i=0;
while(b>0)
{
bh+=(b%10)*pow(16,i);
i++;b=b/10;
}
ch=ah+bh;
string s="";
string a[16]={"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"};
if(ch==0) s="0";
while(ch>0)
{
s=a[ch%16]+s;
ch=ch/16;
}
cout<<s<<endl;
}
}