取巧的做法我就不写了,真的超级短hh
..
16转10相信大家都会嘻嘻
16进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方……
所以,在第N(N从0开始)位上,如果是是数 X (X 大于等于0,并且X小于等于 15,即:F)表示的大小为 X * 16的N次方。
例:2AF5换算成10进制:
用竖式计算:
第0位: 5 * 16^0 = 5
第1位: F * 16^1 = 240
第2位: A * 16^2= 2560
第3位: 2 * 16^3 = 8192
10997
直接计算就是:
5 * 16^0 + F * 16^1 + A * 16^2 + 2 * 16^3 = 10997
c++(注释版本)
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
string n;
//参数说明:n表示输出的16进制数,dex表示去掉0x之后的第一位比如0xe,那就是2,有效数字在第二位
int get(string n, int dex)
{
int res = 0, k = 0; //res表示转化成十进制的结果。k表示次幂
for (int i = n.size() - 1; i >= dex; i --) //从后面往累加到dex有效数字的位置就可以从0次幂开始累加
{
//如果是A-F,那就转成数字A-F --> 10-15
if (n[i] >= 'A' && n[i] <= 'F') res += (n[i] - 'A' + 10) * pow(16, k ++);
//如果是a-f,那就转成数字a-f --> 10-15
else if (n[i] >= 'a' && n[i] <= 'f') res += (n[i] - 'a' + 10) * pow(16, k ++);
//剩下的是数字,直接乘16相应的位数次幂
else res += (n[i] - '0') * pow(16, k ++);
}
return res; //返回结果
}
int main()
{
while (cin >> n)
{
if (n[2] == 'x') cout << '-' << get(n, 3) << endl; //如果是负数-0x有效位从3开始
else cout << get(n, 2) << endl; //正数,有效为0x从2开始
}
return 0;
}
无注释版本
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
string n;
int get(string n, int dex)
{
int res = 0, k = 0;
for (int i = n.size() - 1; i >= dex; i --)
{
if (n[i] >= 'A' && n[i] <= 'F') res += (n[i] - 'A' + 10) * pow(16, k ++);
else if (n[i] >= 'a' && n[i] <= 'f') res += (n[i] - 'a' + 10) * pow(16, k ++);
else res += (n[i] - '0') * pow(16, k ++);
}
return res;
}
int main()
{
while (cin >> n)
{
if (n[2] == 'x') cout << '-' << get(n, 3) << endl;
else cout << get(n, 2) << endl;
}
return 0;
}
orz
orz
❤️
互赞
orz!!~
❤️
Orz
❤️
粘一下
是滴
被我抢到沙发了
感谢你哈哈,❤️送上