C++其他进制转十进制

C++其他进制转十进制

开发工具与关键技术:C++、VisualStudio
作者:何任贤
撰写时间:2019年04月15日
在学习C++基础过程中,接触到进制转换,个人想要尝试一下用C++来写一个进制

转换,这篇文章主要内容是其他进制转十进制,现在的进制有十六进制、十进制、八进制、二进制。
我们先来看代码:
#include
using namespace std;
void main() {
char NUM[50];
int JZ ;
int v10 = 0;
int y = 0;
cout << “请输入要转为十进制的数:”;
cin >> NUM;
cout << “请输入该数的进制:”;
cin >> JZ;
for (int i = strlen(NUM) - 1; i >= 0; i–) {
if (JZ == 16) {
char x = NUM[i];
int e = 0;
if (x == ‘A’ || x == ‘a’) {
e = 10;
}
else
if (x == ‘B’ || x == ‘b’) {
e = 11;
}
else
if (x == ‘C’ || x == ‘c’) {
e = 12;
}
else
if (x == ‘D’ || x == ‘d’) {
e = 13;
}
else
if (x == ‘E’ || x == ‘e’) {
e = 14;
}
else
if (x == ‘F’ || x == ‘f’) {
e = 15;
}
else
{
e = NUM[i] - ‘0’;
}
v10 = v10 + e*pow(JZ, y);
}
else {
int x = NUM[i] - ‘0’;
v10 = v10 + x * pow(JZ, y);
}
y++;
}
cout << “转换成功!值为:” << v10 << endl;
}

代码详解:
代码首先声明了4个变量,分别是char NUM[50];、int JZ ;、int v10 = 0;、int y = 0;,然后我们先后输入了NUM和JZ,NUM是一个其他进制的数,JZ代表了该数是什么进制的,然后我们先了解一下其他进制转十进制的公式,若一个数为101且为二进制时它的十进制等于(122+0*21+120)=5,其中2的某一个次方的这个2取决于它是什么进制,若上面那个数是八进制那么它等于(1*82+0*81+1*80)=65,次方随着位数增长,那么下面for循环的初始表达式是int i = strlen(NUM) - 1;,strlen()这个函数是获取长度的意思,获取NUM的长度减一的原因是,是因为i要做为索引值来使用,逻辑表达式是i >= 0;,当i<0的时候,我们已经把NUM的每一位数遍历完了,那么for循环的后置表达式为i–;,上面有其他进制转成十进制的公式,那么把它写成代码就是v10 = v10 + x * pow(JZ, y);那么v10是我们要输出的结果,x是NUM[i]-‘0’;i上面说过是索引,表示当前是NUM的第几位数-‘0’呢是因为C++的char机制问题,x为NUM中某一位数,pow(JZ, y),JZ不用说,pow是次方函数,y是多少次方的意思,v10则上一位数算出了的和。十六进制的话只是多了一个判断,判断其为A、B、C、D、E、F中的那一位就行了。

下面呢是一些运行的结果:

C++其他进制转十进制C++其他进制转十进制C++其他进制转十进制

上一篇:逆向-攻防世界-(1-3)


下一篇:版本实在是太多,搞不清楚麒麟V10软件国产化的声浪越来越高