
我们的HDOJ一定有不少A+B问题,现在有个新的来了。给你两个十六进制(hexadecimal)整数,把他们加起来然后也用十六进制输出吧。简单吗?A了它!
输入
多组输入数据,处理到文件尾。 每组包括A和B两个十六进制数,隔一个空格(seperated by a blank)。 A和B的长度小于15。
输出
每组在一行中输出A和B的十六进制和。
WA代码待对拍:
#include<iostream>
using namespace std;
long long mi(int x, int n)//幂函数
{
long long res = 1;
for (int i = 1; i <= n; i++)
res *= x;
return res;
}
long long hextodec(char* hex)//十六转十函数
{
int length = 0;
for (int i = 0; hex[i] != '\0'; i++)
length++;//统计字符串长度(即十六进制数的位数加上负号)
long long res = 0;
int minus = 0;
if (*hex == '-')
{
minus = 1;
hex++;
length--;
}
else if (*hex == '+')
{
hex++;
length--;
}
for (int i = length - 1; i >= 0; i--)//i等于几,就加16的几次方
{
switch (*(hex + length - 1 - i))
{
case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:
res += (*(hex + length - 1 - i) - 48) * mi(16, i);//0~9的ASCII码为48到57
break;
case 65:case 66:case 67:case 68:case 69:case 70:
res += (*(hex + length - 1 - i) - 55) * mi(16, i);//A~F的ASCII码为65到70
break;
default:break;
}
}
if (minus == 1)
return -res;
else
return res;
}
char* dectohex(long long n)//十转十六函数
{
if (n == 0)
{
char hex[2] = "0";
return hex;
}
int length;
int minus = 0;//记录是不是负数
if (n < 0)//如果n是负数,则暂时转正
{
minus = 1;
n = -n;
}
for (int i = 15; i >= 0; i--)
{
if (n >= mi(16, i))
{
length = i + 1;//计算n转成十六之后有多少位数
break;
}
}
char hex[18];
for (int i = length - 1 + minus; i >= 0; i--)//如果是负数,则第一位数的字符数组下标+1
{
switch (n % 16)
{
case 10:hex[i] = 'A'; break;
case 11:hex[i] = 'B'; break;
case 12:hex[i] = 'C'; break;
case 13:hex[i] = 'D'; break;
case 14:hex[i] = 'E'; break;
case 15:hex[i] = 'F'; break;
case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:
{
hex[i] = n % 16 + 48;
break;
}
default:break;
}
n = n / 16;
}
hex[length + minus] = '\0';
if (minus == 1)
hex[0] = '-';
return hex;
}
int main()
{
char a[17] = "\0";
char b[17] = "\0";
while(cin >> a >> b)
{
for (int j = 0; dectohex(hextodec(a) + hextodec(b))[j] != '\0'; j++)
cout << dectohex(hextodec(a) + hextodec(b))[j];
cout << endl;
}
return 0;
}
本文介绍了一个解决十六进制数加法的问题,通过将十六进制转换为十进制进行加法运算,再将结果转换回十六进制。文章提供了一段C++代码实现,包括十六进制到十进制的转换函数、十进制到十六进制的转换函数以及主函数用于读取输入并输出结果。
681

被折叠的 条评论
为什么被折叠?



