我是靠谱客的博主 务实小蚂蚁,最近开发中收集的这篇文章主要介绍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("%I64Xn",c);
    }
    return 0;
}


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


最后

以上就是务实小蚂蚁为你收集整理的hdu2057 A + B Again的全部内容,希望文章能够帮你解决hdu2057 A + B Again所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部