码迷,mamicode.com
首页 > 其他好文 > 详细

题解报告:hdu 2057 A + B Again

时间:2018-04-06 17:32:39      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:c代码   转化   div   示例   无符号   模拟   16进制   题解   包含   

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2057

问题描述

  我们的HDOJ必须有许多A + B问题,现在又有新的问题出现。 给你两个十六进制整数,你的任务是计算它们的总和,并以十六进制打印它。 简单 ? AC它!  

输入

   输入包含多个测试用例,请处理至文件末尾。 每个情况由两个十六进制整数A和B组成,并由一个空格分隔。 A和B的长度小于15。  

输出

  对于每个测试用例,在一行中以十六进制格式打印A和B的总和。  

示例输入  

+ A   -A   

+ 1A  12  

1A  -9   

 -1A   -12  

1A  -AA  

示例输出    

 0    

2C  

11 

-2C 

-90

解题思路:这是一道关于16进制加法。刚开始想用模拟大数那样的方法来先转化成10进制,再转化成16进制输出,但想到有%X这个输出格式控制符,于是就换了种写法。经过对%X的查阅了解,解决这题可以用%I64X(这里的‘X‘是大写),也可以用long long来处理,要注意到16进制中负数是用补码来表示的,计算机会自己处理16进制加法的,所以不必采用模拟法。因为长度是小于15(即15位),在long long (__int64)(即19位)数据的范围内,所以直接使用它们,但要注意的是如果计算结果是负数的话,由于%I64X 输出格式是输出一个unsigned long long int,无符号64位正整数,前面加负号让其转换成有符号的64位,并输出单独加个‘-‘(负号)。下面给出这两种写法:

AC代码:

写法一:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int main()
 4 {
 5     __int64 A,B;
 6     while(~scanf("%I64X %I64X",&A,&B)){
 7         if(A+B<0)printf("-%I64X\n",-(A+B));
 8         else printf("%I64X\n",(A+B));
 9     }
10     return 0;
11 }

写法二:(注意输出格式是大写的‘X‘)

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int main()
 4 {
 5     long long A,B;
 6     while(~scanf("%llX %llX",&A,&B)){
 7         if(A+B<0)printf("-%llX\n",-(A+B));
 8         else printf("%llX\n",(A+B));
 9     }
10     return 0;
11 }

 

题解报告:hdu 2057 A + B Again

标签:c代码   转化   div   示例   无符号   模拟   16进制   题解   包含   

原文地址:https://www.cnblogs.com/acgoto/p/8728134.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!