进制转换

yuanheci 2023年04月07日 237次浏览

进制转换的核心式子

此处 nn1010 进制
n=ak1bk1+ak2bk2+ak3bk3+...+a1b1+a0b0n = a_{k - 1} * b^{k-1} + a_{k - 2} * b^{k - 2} + a_{k-3} * b^{k-3} + ... + a_{1} * b^1 + a_{0} * b^0

b进制转为10进制(秦九韶算法)

用秦九韶算法可以快速求解:

//s是b进制数的字符串形式
int get(string s, int b)  // 将b进制的数转化成十进制
{
    int res = 0;
    // 秦九韶算法
    for (auto c : s)
        res = res * b + c - '0';
    return res;
}

例题:《进制转换》


10进制转为b进制(短除法)

每次模 bb,然后余数就是从个位、十位的顺序,用一个 vectorvector 存起来,最后倒序输出即可。

例如:将 1010 进制数 226226 转成 44 进制数。

#include <bits/stdc++.h>
using namespace std;

vector<int> a;
string s;

void solve(){
	int n = 226;
	int b = 4;   //4进制为3202  
	while(n){
		a.push_back(n % b);
		n /= b; 
	}
	for(int i = a.size() - 1; i >= 0; i--) printf("%d", a[i]);
}

int main(){
	int _ = 1;
	while(_ -- ){
		solve();
	}
	return 0;
}