具体题目
http://acm.hdu.edu.cn/showproblem.php?pid=2057
http://acm.hdu.edu.cn/showproblem.php?pid=1720
转载地址:
https://blog.csdn.net/xujinsmile/article/details/7836413
https://blog.csdn.net/i_fuqiang/article/details/8262844
代码:C语言 1720+2057
#include<stdio.h> int main() { int a,b; while(scanf("%x%x",&a,&b)!=EOF) { printf("%d\n",a+b);//对于2057 修改为 printf("%x\n",a+b); } return 0; }
代码:C++ 1720+2057
#include<iostream>
#include<iomanip>
using namespace std; int main(){ __int64 a,b,c; while(cin>>hex>>a>>b){ int c=0; c=a+b; if(c<0){ cout<<"-"; c=-c; } cout<<dec<<uppercase<<c<<endl;//2057:cout<<hex<<uppercase<<c<<endl; } return 0; }
注意事项:你要明白的是 计算机存入的数据是二进制 0 1 所以
scanf("%d",&a);就是你输入的一个十进制 比如 你输入10(这边是十进制数) 他也代表10(十六进制) 计算机存储是 10000
scanf("%x",&a);就是你输入的一个十六进制 比如 你输入10(是这边是十六进制数) 他也代表8(十进制) 计算机存储是 1000
而在计算b=a/15-273 的时候 计算机是用它们各自表示的二进制来计算的 因此事实上得到的b存在计算机里是以二进制存在的 只是当你输出时候利用强制转换输出才变成我们想要的十进制或者十六进制 比如: 在b输出时候用十六进制输出 也就是printf("%x",b);
C++也提供十六进制加法
头文件:#include <iomanip>
说明:是I/O流控制头文件,就像C里面的格式化输出一样
控 制 符 | 作 用 |
dec | 设置整数为十进制 |
hex | 设置整数为十六进制 |
oct | 设置整数为八进制 |
setbase(n) | 设置整数为n进制(n=8,10,16) |
setfill(n) | 设置字符填充,c可以是字符常或字符变量 |
setprecision(n) | 设置浮点数的有效数字为n位 |
setw(n) | 设置字段宽度为n位 |
setiosflags(ios::fixed) | 设置浮点数以固定的小数位数显示 |
setiosflags(ios::scientific) | 设置浮点数以科学计数法表示 |
setiosflags(ios::left) | 输出左对齐 |
setiosflags(ios::right) | 输出右对齐 |
setiosflags(ios::skipws) | 忽略前导空格 |
setiosflags(ios::uppercase) | 在以科学计数法输出E与十六进制输出X以大写输出,否则小写。 |
setiosflags(ios::showpos) | 输出正数时显示"+"号 |
setiosflags(ios::showpoint) | 强制显示小数点 |
resetiosflags() | 终止已经设置的输出格式状态,在括号中应指定内 |
hex的输出中字母默认为小写,需要加上uppercase
十六进制负数在计算机里表示为补码形式,要显示出带正负号的十六进制形式来就要对其取反加负号,-c即可!
2057 #include<iostream> #include<iomanip> using namespace std; int main(){ __int64 a,b,c; while(cin>>hex>>a>>b){ int c=0; c=a+b; if(c<0){ cout<<"-"; c=-c; } cout<<hex<<uppercase<<c<<endl; } return 0; }