杭电2057

题目大意是输入两个带正负号的十六进制数,再以十六进制输出其和

本以为是一道水题,直接用%x进行运算就行,但是后面出现了许多问题

首先是%x输出负数时会出现ffff的代码,后面查了一下发现大致是转码方面的问题,所以想要输出题目里的结果,就必须要把负数处理一下

然后后面有几次wrong answer是数据类型的问题(和某四渠注水问题尿性类似),所以将输入数据改为了long long,但是这个时候%x出问题了,后面经过查询了解到%x只能对应int类型,而要对应64位的long long类型,%x要改写为%I64x

#include<stdio.h>

int main(void){
    long long a, b, sum;
    while( scanf("%I64X%I64X", &a, &b)!=EOF ){
        sum=0;
        sum = a+b;
        if(sum < 0){
            sum *= -1;
            printf("-%I64X
", sum);
        }else{
            printf("%I64X
", sum);    
        }
    }
    return 0;
}
原文地址:https://www.cnblogs.com/ssNiper/p/11106607.html