题目:进制转换合集。任意r进制与十进制之间的转换
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
long stringToDecimal(const char* str, int base);
void convertToBaseR(int num, int r);int main() {char hexStr[] = "1A3F";char octStr[] = "123";char binStr[] = "101010";printf("十六进制转换成十进制为: %ld\n", stringToDecimal(hexStr, 16));printf("八进制转换成十进制为: %ld\n", stringToDecimal(octStr, 8));printf("二进制转换成十进制为: %ld\n", stringToDecimal(binStr, 2));int num, r;printf("请输入十进制的整数: ");scanf_s("%d", &num);printf("请输入要转化的进制数: ");scanf_s("%d", &r);convertToBaseR(num, r);return 0;
}
long stringToDecimal(const char* str, int base) {long result = 0;int multiplier = 1;int length = strlen(str);for (int i = length - 1; i >= 0; i--){char ch = tolower(str[i]);int digit = -1;if (ch >= '0' && ch <= '9') {digit = ch - '0';}else if(base == 16 && (ch >= 'a' && ch <= 'f')){digit = ch - 'a' + 10;}else if(ch < '0' || (ch > '9' && base !=16) ||(base == 16) && ch > 'f'){return 0;}if (digit >= base) {return 0;}result += digit * multiplier; multiplier *= base;}}
void convertToBaseR(int num, int r) {int index = 0;char result[65];if (num == 0) {printf("0\n");return;}while (num > 0){int remainder = num % r;if (remainder < 10) {result[index++] = '0' + remainder;}else{result[index++] = 'A' + (remainder - 10);}num = num / r; }result[index] = '\0'; for (int i = index; i >= 0; i--){printf("%c", result[i]);}printf("\n");
}