hdu2057 A + B Again

题意: 求两个十六进制数的和,要求输出也是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("%I64X\n",c);
    }
    return 0;
}


16进制输入输出的long long型,也是醉了。。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值