?
大家在做编程题的过程中一定遇到过类似,进制之间的转换的问题,无论是二进制、八进制、还是我们最熟悉的十进制,不同的进制存在着不同的存储方式,那么不同的存储方式之间又会有着相互转换,那么今天我们来讲一讲代码该如何实现进制之间的转换。
由于我们在生活中大多使用的都是十进制,所以我们也是对十进制最了解的,那么我们先来从十进制转换任意进制说起:
在数学中我们如果要求几进制的时候,最常用的方法就是使用短除法
我们以十进制转二进制为例:
总结:
?1、除以进制数
2、保留他的余数
3、保留它的商
4、余数的从后往前依次排开就是521的二进制序列
那么我们如果想要做到十进制转化为任意进制也是这个流程(先补充一个知识点如果,要转换成16进制或者只要是比10大的数时,就用A、B、C、......来代替,例如:11就是A,12就是B)
#include <stdio.h>
void convertToBase(int num, int base) {
// 定义一个数组存放转换后的结果
char result[100];
int index = 0;
// 当输入的数大于0时进行转换
while (num > 0) {
int remainder = num % base;//余数
if (remainder < 10) {
result[index++] = remainder + '0';
} else {
result[index++] = remainder - 10 + 'A';
}
num = num / base;//更新num的值,将每次商作为下一次的被除数
}
//逆置打印,输出转换后的结果
printf("转换后的结果为: ");
for (int i = index - 1; i >= 0; i--) {
printf("%c", result[i]);
}
printf("\n");
}
int main() {
int num, base;
printf("请输入一个十进制数: ");
scanf("%d", &num);
printf("请输入要转换的进制数(2-16): ");
scanf("%d", &base);
convertToBase(num, base);
return 0;
}
?这样我们就实现了,十进制转换任意进制的问题🎖?🎖?🎖?
?我们学习了十进制转换任意进制再看这个简直就是易如反掌
我们给出一个简单的1011二进制的序列,如果我们把它转换为10进制就只需要把他的每一位取出来依次乘二进制的2从零开始一直到(位数-1)再相加就是10进制的数:
那么,我们如果是任意的进制也是按照这个思路走,然后我们实现以下代码?:
#include <stdio.h>
#include <string.h>
toten(char* str, int ne) {
ans = 0, arg = 1;//arg初始为1,就可以保证在第一次循环的时候×进制的0次方是1
int len = strlen(str);
for (int i = len - 1; i >= 0; i--) {
if (str[i] <= '9')
ans += (str[i] - '0') * arg;
else
ans += (str[i] - 'A' + 10) * arg;
arg *= ne;
}
return ans;
}
int main() {
char num[20];
int base;
printf("请输入一个数字:");
scanf("%s", num);
printf("请输入数字的进制:");
scanf("%d", &base);
decimal = toten(num, base);
printf("转换为十进制的结果为:%d\n", decimal);
return 0;
}
这个代码就可以实现任意进制转换为十进制了,那么当我们需要任意进制转换为任意进制的时候,我们可以借助我们熟悉的10进制来作为中间值,两个代码就可以实现了,当然也有其他的方法,期待大家告诉我,我的分享就到这里了!🫖🫖🫖?