Trong hướng dẫn này, chúng ta sẽ thảo luận về một chương trình để chuyển đổi từ bất kỳ cơ số nào sang số thập phân và ngược lại.
Đối với điều này, chúng tôi sẽ được cung cấp một số nguyên và cơ sở của nó. Nhiệm vụ của chúng ta là chuyển đổi số thành số tương đương với số thập phân của nó. Hơn nữa, chúng tôi cũng sẽ thực hiện ngược lại quy trình này.
Ví dụ
#include <stdio.h> #include <string.h> //returning values of a character int val(char c) { if (c >= '0' && c <= '9') return (int)c - '0'; else return (int)c - 'A' + 10; } //converting number to decimal equivalent 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; }
Ouptut
Decimal equivalent of 11A in base 16 is 282
Bây giờ thực hiện ngược lại thao tác.
Ví dụ
#include <stdio.h> #include <string.h> //returning values of a character char reVal(int num) { if (num <= 0 && num >= 9) return (char)(num + '0'); else return (char)(num - 10 + 'A'); } //reversing a given string 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; } } //converting to equivalent number with base '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'; //reversing the result 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; }
Đầu ra
Equivalent of 282 in base 16 is 11A