目录
前言
心血来潮,来写写进制转换proMax版本吧。
一、什么是进制转换
1.基本定义
进制转换是人们利用符号来计数的方法。进制转换由一组数码符号和两个基本因素“基数”与“位权”构成。基数是指,进位计数制中所采用的数码(数制中用来表示“量”的符号)的个数。位权是指,进位制中每一固定位置对应的单位值。
2.进制转换本质
“数制”只是一套符号系统来表示指称“量” 多少,就如我们用“1”这个符号来表示这一“量”的概念。自然界的“量”是无穷的,我们不可能为每个“量”都造一个符号,这样的系统没人记得住。所以必须用有限的符号按一定的规律进行排列组合来表示量。符号是有限的,而这些符号按照某种规则进行排列组合的个数是无限的。十进制就是10个符号的排列组合,二进制就是2个符号的排列组合。
在进行进制转换时有一基本原则:转换后表达的”量"的多少不能发生改变。二进制中111个苹果和十进制的7个苹果是一样多的。
二、基本原理及C++代码示例
1.十进制转k进制
我们以十进制转二进制为例
对于整数部分,用被除数反复除以2,除第一次外,每次除以2均取前一次商的整数部分作被除数并依次记下每次的余数。另外,所得到的商的最后一位余数是所求二进制数的最高位。
对于小数部分,采用连续乘以基数2,并依次取出的整数部分,直到结果的小数部分为0为止。故称为“乘基取整法”。
具体过程如图所示:
C++代码示例:
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int arr[N];
int n, k, y = 0; //n表示需转换的数字,k表示多少进制
int main() {
cin >> n >> k;
while (n != 0) {
y++;
arr[y] = n % k;
n /= k;
}
for (int i = y; i > 0; i--) {
cout << arr[i];
}
return 0;
}
2.k进制转十进制
k进制转十进制相对来说就比较简单了,只要k进制数每一位乘以k的幂次方,然后直接累加即可。
话不说,直接上代码
C++代码演示:
#include<bits/stdc++.h>
using namespace std;
int main() {
int k, n = 0; //k表示一个二级制数,n表示最终得到的十进制数
int lent = 0; //表示对应的多少幂次方
cin >> k;
while (k != 0) {
int last_num = k % 10; //last_num表示二进制数最后一位上的数字
n += last_num * pow(2, lent);
lent++;
k /= 10;
}
cout << n;
return 0;
}
总结
好了,拖拖拉拉终于把这篇博客写完了(手动尴尬),希望这篇文章对你有帮助吧。