16进制a+b
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
注意:不只是单个的字符 有可能是2个甚至多个 所以要用字符串输入
AC代码:
#include <stdio.h>
#include <string.h>
int main()
{
char a[100],b[100];
int c=0,d=0,i;
while(scanf("%s %s",a,b)!=EOF)
{
int n=strlen(a);
int m=strlen(b);
int p=1;
for(i=n-1;i>=0;i--)
{
if(a[i]>='a'&&a[i]<='z')
c+=(a[i]-87)*p;
else
if(a[i]>='A'&&a[i]<='Z')
c+=(a[i]-55)*p;
else
if(a[i]>='0'&&a[i]<='9')
c+=(a[i]-48)*p;
p*=16;
}
p=1;
for(i=m-1;i>=0;i--)
{
if(b[i]>='a'&&b[i]<='z')
d+=(b[i]-87)*p;
else
if(b[i]>='A'&&b[i]<='Z')
d+=(b[i]-55)*p;
else
if(b[i]>='0'&&b[i]<='9')
d+=(b[i]-48)*p;
p*=16;
}
printf("%d\n",c+d);
c=0,d=0;
memset(a,'0',sizeof(a));
memset(b,'0',sizeof(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);
}
}