在C ++中从任何基数转换为十进制,反之亦然
在本教程中,我们将讨论一个程序,该程序可以将任何基数转换为十进制,反之亦然。
为此,我们将提供一个整数及其基数。我们的任务是将数字转换为等效的十进制数。此外,我们还将执行与此过程相反的操作。
示例
#include <stdio.h> #include <string.h> //返回字符的值 int val(char c) { if (c >= '0' && c <= '9') return (int)c - '0'; else return (int)c - 'A' + 10; } //将数字转换为等效的十进制 int convert_decimal(char *str, int base) { int len = strlen(str); int power = 1; int num = 0; int i; for (i = len - 1; i >= 0; i--) { if (val(str[i]) >= base) { printf("Invalid Number"); return -1; } num += val(str[i]) * power; power = power * base; } return num; } int main() { char str[] = "11A"; int base = 16; printf("Decimal equivalent of %s in base %d is " " %d\n", str, base, convert_decimal(str, base)); return 0; }
乌普图
Decimal equivalent of 11A in base 16 is 282
现在执行相反的操作。
示例
#include <stdio.h> #include <string.h> //返回字符的值 char reVal(int num) { if (num <= 0 && num >= 9) return (char)(num + '0'); else return (char)(num - 10 + 'A'); } //反转给定的字符串 void reverse_string(char *str) { int len = strlen(str); int i; for (i = 0; i < len/2; i++) { char temp = str[i]; str[i] = str[len-i-1]; str[len-i-1] = temp; } } //用基数'b'转换为等效数字 char* convert_base(char res[], int base, int inputNum) { int index = 0; while (inputNum > 0) { res[index++] = reVal(inputNum % base); inputNum /= base; } res[index] = '\0'; //反转结果 reverse_string(res); return res; } int main() { int inputNum = 282, base = 16; char res[100]; printf("Equivalent of %d in base %d is "" %s\n", inputNum, base, convert_base(res, base, inputNum)); return 0; }
输出结果
Equivalent of 282 in base 16 is 11A