进制转换(C++)

文章目录

  • 一、任意2-36进制数转换为10进制数
    • 1.1 c++代码实现
  • 二、十进制转换为其他进制
    • 2.1 方法一
    • 2.2 c++代码实现
    • 2.3 方法二
    • 2.4 Demo

一、任意2-36进制数转换为10进制数

以二进制转换为十进制为例:
基本规则:把二进制数按权展开、相加即得十进制数。
进制转换(C++)_第1张图片

1.1 c++代码实现

int toDecimal(string s, int radix){    //s是给定的radix进制字符串
	int ans = 0;
	for(int i = 0; i < s.size(); i++){
		char t = s[i];
		if(t >= '0' && t <= '9') ans = ans * radix + (t - '0');
		else ans = ans * radix + (t - 'a' + 10);
	}
		return ans;
}

二、十进制转换为其他进制

2.1 方法一

以十进制转换为二进制为例:

基本规则:十进制数除2取余法,即十进制数除2,余数为权位上的数,得到的商值继续除,直到商为0为止。
进制转换(C++)_第2张图片

2.2 c++代码实现

string convertToOtherRadix(int num, int radix) {
    if (num == 0) return "0";
    bool is_negative = num < 0;
    if (is_negative) num = -num;
    string ans;
    while (num) {
        int remainder = num % radix;//取余
        if(remainder < 10){
            ans = char('0' + remainder) + ans;//从最后一个余数读到第一个余数
        } else { 
            ans = char('A' + remainder - 10) + ans;
        }
        num /= radix;
    }
    return is_negative? "-" + ans : ans;
}

2.3 方法二

itoa()函数(可以将一个10进制数转换为任意的2-36进制字符串)

用法:charitoa(int value,charstring,int radix);

2.4 Demo

#include
#include

using namespace std;

int main(){
	int num = 10;
	char str[10];
	itoa(num, str, 16);  //将十进制的10,转换为16进制,并存在字符串str中
	printf("%s", str);
	return 0;
}

你可能感兴趣的:(c++,算法)