杭电 1720 A+B Coming 十六进制转化为十进制

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 这个是输进去十六进制的。不然电脑怎么知道你输进去的是十六进制还是其他的~~就酱

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值