进制转换小知识

哈喽!!!各位,今天我们来学习进制转换,我是知识君,你的知识小帮手。

进制进率
二进制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>100,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!

附:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值