这个我在网上看到的一篇进制转化,因为我正在学c,老师要让我们写进制转化,大多数进制转化代码量都挺多的,依靠我的vs2019跑出来后出现大量问题,这个是vs版本问题,我就做了自己的解释,以及对代码做了部分修改。
#include<stdio.h>//stdio .h 头文件定义了三个变量类型、一些宏和各种函数来执行输入和输出
#include<string.h>//string .h 头文件定义了一个变量类型、一个宏和各种操作字符数组的函数。
void main()
{
int n, m, i, j;//定义了四个分别为n,m,i,j的int类型的
char x[100];//定义了数组x的长度
while (scanf("%d%d", &n, &m) != EOF)//EOF为End Of File的缩写,获取两个数n为需要转化进制的数,m为需要转化的进制
{
if (n == 0)break;//判断n是否等于0,
memset(x, 0, sizeof(x));// memset()memset可以方便的清空一个结构类型的变量或数组。sizeof用来求一个对象(类型,变量,……)所占的内存大小(以字节为单位)。
if (m < 10)//当m小于10时,进行以下循环,判断是否进行10以下的进制转化,不是则进行10以上的进制转化
{
i = 0;//赋予i的值为0
while (n != 0)//当n不等于0时进行以下步骤
{
x[i++] = n % m + '0';//数组x[]就是转化后的进制,并记录下来
n = n / m;//n等于n除以m的值取整数,再判断n是否等于0,不等于0时,继续改循环,直到n等于0
}
}
if (m > 10)//进行10以上的进制转化
{
i = 0;//赋予i的值为0
while (n != 0)//当n不等于0时进行以下步骤
{
if (n % m < 10)//判断n除以m后的余数是不是小于10,当小于10时,返回数字1-9,当大于等于10时,返回字母a-g
x[i++] = n % m +'0';
else x[i++] = n % m - 10 +'A';
n = n / m;//n等于n除以m的值取整数,再判断n是否等于0,不等于0时,继续改循环,直到n等于0
}
}
if(m!=10)
{
for (j = i - 1; j >= 0; j--)//j等于i-1,当j大于等于0时输出x[j]转化后对应的字符,再进行j自减,直到j小于0时退出该循环
printf("%c", x[j]);//将x[j]按照ASCII码相应转换为对应的字符
printf("\n");//换行
}
}
}