Problem Description
Many classmates said to me that A+B is must needs.
If you can’t AC this problem, you would invite me for night meal. ^_^
Input
Input may contain multiple test cases. Each case contains A and B in one line.
A, B are hexadecimal number.
Input terminates by EOF.
Output
Output A+B in decimal number in one line.
Sample Input
1 9
A B
a b
Sample Output
10
21
21
Author
威士忌
这个题我开始写的时候,觉得很简单呀。我英文不好,所以看题都是连蒙带猜,难一点的题才会说去找翻译,这种简单的就当做阅读理解了。然后,我以为是把单个的十六进制字符进行运算,我把题目拖到百度翻译才晓得。哦,我理解错了。然后,我想这就需要把十六进制数字转化为十进制,然后加起来,就打算写个子函数,以后也方便直接用,就开始了,写好之后一直都不对,主要原因就是在把每一位字符转换之后算总和时候,我用了一个函数 pow 换了一个方法之后就可以了。
#include "cstdio"
#include "algorithm"
#include "cmath"
#include "cstring"
long long int f(char *a)
{
int l=strlen(a);
long long int b[2000];
int i;
long long int sum=0;
for(i=0;i<l;i++)
{
if(a[i]=='0')
b[i]=0;
if(a[i]=='1')
b[i]=1;
if(a[i]=='2')
b[i]=2;
if(a[i]=='3')
b[i]=3;
if(a[i]=='4')
b[i]=4;
if(a[i]=='5')
b[i]=5;
if(a[i]=='6')
b[i]=6;
if(a[i]=='7')
b[i]=7;
if(a[i]=='8')
b[i]=8;
if(a[i]=='9')
b[i]=9;
if(a[i]=='A'||a[i]=='a')
b[i]=10;
if(a[i]=='B'||a[i]=='b')
b[i]=11;
if(a[i]=='C'||a[i]=='c')
b[i]=12;
if(a[i]=='D'||a[i]=='d')
b[i]=13;
if(a[i]=='E'||a[i]=='e')
b[i]=14;
if(a[i]=='F'||a[i]=='f')
b[i]=15;
}
for(i=0;i<l;i++)
{
sum=sum*16+b[i];
}
return sum;
}
using namespace std;
int main()
{
char a[1005],b[1005];
while(scanf("%s %s",a,b)!=EOF)
{
printf("%I64d\n",f(a)+f(b));
}
return 0;
}
我也觉得有些拖拉,在查错过程中,我就发现了非常简单的方法,。但是作为一个初学者,我还是希望自己动手实践一些最基础的东西。
#include<stdio.h>
#include<string.h>
int main()
{
int a,b;
while (scanf("%x %x",&a,&b)!=EOF)
{
printf("%d\n",a+b);
}
return 0;
}
就一个小东西需要知道,那就是%x 这个是输进去十六进制的。不然电脑怎么知道你输进去的是十六进制还是其他的~~就酱