题目来源:http://acm.hdu.edu.cn/diy/contest_showproblem.php?pid=1010&cid=31373&problem=Problem%20%20J
解法或类型:循环结构。
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 inone 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
题意描述
给两个十六进制的数计算它们的十进制之和。
解题思路
先分别把两个十六进制的数转化为十进制的数,然后计算二者之和。
时空分析:
程序代码:
#include<stdio.h>
#include<string.h>
#include<math.h>
intmain()
{
char a[1000],b[1000];
int i,c,d,sum1,sum2,l1,l2;
while(scanf("%s%s",a,b)!=EOF)
{
l1=strlen(a);
l2=strlen(b);
c=0;
sum1=0;
for(i=0;i<l1;i++)
{
if(a[i]>='0'&&a[i]<='9')
{
c=(a[i]-'0')*pow(16,l1-1-i);
sum1+=c;
}
if(a[i]>='a'&&a[i]<='f')
{
c=(a[i]-87)*pow(16,l1-1-i);
sum1+=c;
}
if(a[i]>='A'&&a[i]<='F')
{
c=(a[i]-55)*pow(16,l1-1-i);
sum1+=c;
}
}
d=0;
sum2=0;
for(i=0;i<l2;i++)
{
if(b[i]>='0'&&b[i]<='9')
{
d=(b[i]-'0')*pow(16,l2-1-i);
sum2+=d;
}
if(b[i]>='a'&&b[i]<='f')
{
d=(b[i]-87)*pow(16,l2-1-i);
sum2+=d;
}
if(b[i]>='A'&&b[i]<='F')
{
d=(b[i]-55)*pow(16,l2-1-i);
sum2+=d;
}
}
printf("%d\n",sum1+sum2);
}
return 0;
}
错误分析:
1、
2、
3、