概述
题意: 求两个十六进制数的和,要求输出也是16进制。
一看见字符串的题就头大,一开始也试了试用%x 直接输入,结果输出0xfffXX..然后。。16进制到10进制 10进制再到16.。。一开始没注意范围WA了一次。。改成long long 就好了,好欣慰啊。。
我的代码:
#include "iostream"
#include "string"
using namespace std;
int get_num(char c)
{
if (c >= '0' && c <= '9') return c - '0';
return c - 55;
}
int main()
{
char s1[100],s2[100];
while (cin >> s1 >> s2) {
char tt[20];
long long ok1 = 1, ok2 = 1, ok = 1,len1,len2,sta1 = 0,sta2 = 0,sum1 = 0,sum2 = 0,ss,idx = 0;
if (s1[0] == '-') ok1 = 0;
if (s2[0] == '-') ok2 = 0;
len1 = strlen(s1);
len2 = strlen(s2);
if (s1[0] =='+' || s1[0] == '-') { sta1 ++;}
if (s2[0] =='+' || s2[0] == '-') { sta2 ++;}
for (int i = sta1;i < len1;++ i)
{ sum1 *= 16;
sum1 += get_num(s1[i]);
}
for (int i = sta2;i < len2;++ i)
{
sum2 *= 16;
sum2 += get_num(s2[i]);
}
if (ok1 == 0) sum1 = -sum1;
if (ok2 == 0) sum2 = -sum2;
ss = sum1 + sum2;
if (ss < 0) { cout << "-"; ss= -ss; }
if(ss == 0) tt[idx++] = 48;
while (ss) {
int n = ss%16;
if (n < 10) tt[idx++] = 48 + n;
else tt[idx++] = 55 + n;
ss /= 16;
}
for (int i = idx- 1 ;i >= 0;-- i)
cout << tt[i];
cout << endl;
}
return 0;
}
后来百度的代码
#include<iostream>
using namespace std;
int main()
{
__int64 a,b,c;
int i;
while(scanf("%I64X %I64X",&a,&b)!=EOF)
{
c=a+b;
if(c<0){ cout<<"-"; c=-c;}
printf("%I64Xn",c);
}
return 0;
}
16进制输入输出的long long型,也是醉了。。
最后
以上就是务实小蚂蚁为你收集整理的hdu2057 A + B Again的全部内容,希望文章能够帮你解决hdu2057 A + B Again所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复