进制转换

yuanheci 2023年04月07日 785次浏览

进制转换的核心式子

此处 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进制(秦九韶算法)

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

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

例题:《进制转换》


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

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

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

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

  3. vector<int> a;
  4. string s;

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

  14. int main(){
  15. int _ = 1;
  16. while(_ -- ){
  17. solve();
  18. }
  19. return 0;
  20. }