哈喽!!!各位,今天我们来学习进制转换,我是知识君,你的知识小帮手。
进制 | 数 | 进率 |
---|---|---|
二进制 | 0,1 | 逢二进一 |
八进制 | 0,1,2,3,4,5,6,7 | 逢八进一 |
十进制 | 0,1,2,3,4,5,6,7,8,9 | 逢十进一 |
十六进制 | 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F | 逢十六进一 |
对于n进制来讲:
进制 | number |
---|---|
n <= 9 | 采用的数字为 0 到n - 1 |
n>10 | 0,1,2,3,4,5,6,7,8,9,A,B,C,D… |
十进制转n进制
(以二进制为例)
十进制数除二倒取余数就是二进制数啦!!!
以下是一个使用C++编写的将十进制转换为二进制的程序:
#include <bits/stdc++.h>
using namespace std;
void decimalToBinary(int decimal) {
stack<int> binaryStack;
// 将十进制数字转换为二进制,并将每一位存储到栈中
while (decimal != 0) {
binaryStack.push(decimal % 2);
decimal /= 2;
}
// 从栈中弹出每一位二进制数字并输出
while (!binaryStack.empty()) {
cout << binaryStack.top();
binaryStack.pop();
}
cout << endl;
}
int main() {
int decimal;
cout << "请输入一个十进制数字:";
cin >> decimal;
cout << decimal << "的二进制表示为:";
decimalToBinary(decimal);
return 0;
}
这个程序使用了栈数据结构来存储每一位二进制数字,然后从栈中弹出每一位并输出。
(Code written by INSCODE AI 创作助手)
or
An eazier way!
短除法
比如
10 进制转换2进制
114 mod 2 = 0
57 mod 2 = 1
28 mod 2 = 0
14 mod 2 = 0
7 mod 2 = 1
3 mod 2 = 1
1 mod 2 = 1
最后倒序枚举余数即可。
那么,我们可以有两种方案,递归和存数组。
存数组,字面意思,把余数存下来,最后翻转,输出。
递归,每次准备着输出数,但先递归后面的余数,最后返回来输出。
code1
#include <bits/stdc++.h>
using namespace std;
string dict = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
string ten_to_x(int n, int x) //十进制转 x 进制函数。
{
string ans = "";
while (n != 0) //模拟短除法。
{
ans += dict[n % x];
n /= x;
}
string t = ""; //倒取余数。
for (int i = ans.length()-1; i >= 0; i--) t += ans[i];
return t;
}
int main()
{
int n, x;
cin >> n >> x;
cout << ten_to_x(n, x);
return 0;
}
code2
#include<bits/stdc++.h>
using namespace std;
long long n,x;
string c="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";//存数
void f(long long a,long long m)
{
if(a/m)f(a/m,m);
cout<<c[a%m];
}//递归
int main()
{
cin >> n >> x;
if(x == 0)
{
cout<<0;
return;
}
f(n,x);
return 0;
}
n进制转10进制
#include <iostream>
#include <cmath>
int main() {
int n, num;
std::cout << "请输入n进制数的基数n:";
std::cin >> n;
std::cout << "请输入" << n << "进制数:";
std::cin >> num;
// 将n进制数转换为10进制数
int res = 0, i = 0;
while (num != 0) {
int temp = num % 10; // 取出num的最后一位数字
res += temp * std::pow(n, i);
i++;
num /= 10;
}
std::cout << "转换为10进制数为:" << res << std::endl;
return 0;
}
其中,通过循环依次取出n进制数的每一位数字,并使用幂函数std::pow()将其转换为10进制数,然后相加得到最终结果。
(still code written by INSCODE AI 创作助手)
or
#include <bits/stdc++.h>
using namespace std;
int x, a[105]; // 输入x进制
string S;
// char转数码
int charToInt(char c) {
if('0'<=c&&c<='9') return c-'0';
return c-'A'+10;
}
int main(void) {
cin>>x>>S;
int len=S.size();
for(int i=len-1;i>=0;i--)
a[len-1-i]=charToInt(S[i]);
int ans=0,w=1;
for(int i=0;i<len+1;i++){
ans+=w*a[i];
w*=x;
}
cout<<ans;
return 0;
}
(code written by oier)
ok,那么这就是本期进制转换的全部内容了。
下期再见,bye!
附:
无