/*题目要求:把任意十进制的数转换成2-16之间任意进制的数
内心想法:以前这个真心没做过,感觉不大会。我是零基础,c语言看的不是很多,而且也是之前看的,都快忘了。现在主要在看oc。但是我可以尝试编写一个转换成二进制的试试。
1、一开始真的只是尝试写了二进制,也遇到一些问题,比如最后数组倒着打印时,如何添加判断条件。
2、实现零二进制的转换,我发现只要添加一个R,就可以随意转换成任意进制。
3、但是后来又发现问题,超过十进制的需要字母ABCDEF等,又添加了switch语句。
4、后来打印又出现问题,添加判断语句,数字打印数字,字母打印字母。好在最后都完成了,还是有点小开心。
*/
#import <stdio.h>
int main()
{
int two[16] = {0}; // 先建立一个数组,16位够用了。
int ten = 0; // 用来获取十进制等数字
int R = 0; // 改成R进制
int div = 1; // 这个是除数的商,先赋值个1,因为后面的循环需要判断大与0
printf("请输入十进制整数\n");
scanf("%d", &ten); //获取十进制数字
printf("请输入想要转换成几进制(介于2-16之间):\n");
scanf("%d", &R); //获取改成几进制
for (int i = 0; div > 0; i++)
{
div = ten / R; // 这里是求商
two[i] = ten % R; // 这里是求余数
ten = div; // 把商再次赋值给被除数
if (two[i]>=10) // 因为超过十进制的需要转换成字母,所以加了个switch语句
{
switch (two[i])
{
case 10:
two[i] = 'A';
break;
case 11:
two[i] = 'B';
break;
case 12:
two[i] = 'C';
break;
case 13:
two[i] = 'D';
break;
case 14:
two[i] = 'E';
break;
case 15:
two[i] = 'F';
default:
break;
}
}
}
printf("转换成%d进制的结果是:\n",R);
int m = 0; // 这个是为了判断第一个不是0的元素(一开始脑昏,把这句写到循环里,总不对...)
for (k = 15; k >= 0; k--)
{
if (m == 0 && (two[k] != 0) ) // 碰到第一个非0元素,让m=1,可以进行下面的语句
{
m = 1;
}
if (m == 1)
{
if (two[k] >= 0 && two[k] <= 9) // 这是为了应对超过十进制的,输出数字和字母
{
printf("%d",two[k]);
}
else
printf("%c",two[k]);
}
}
printf("\n"); // 因为Xcode输出最后总有句话,加个换行,方便看结果。
return 0;
} |