黑马程序员技术交流社区
标题:
请教一道题,给我点思路也可以
[打印本页]
作者:
disgusting
时间:
2014-6-13 16:21
标题:
请教一道题,给我点思路也可以
本帖最后由 disgusting 于 2014-6-14 19:47 编辑
编程实现将任意的十进制整数转换成任意R进制数(R在2-16之间)。(
作者:
69042011
时间:
2014-6-14 12:45
本帖最后由 69042011 于 2014-6-14 13:45 编辑
/*
实现输入任何十进制,转化为2-16进制
思路:根据进制转化的思想来考虑
1.根据转化思想然后转化为条件 循环语句来实现
(输入十进制数对其输入的R进制数求余得到的存入数组,然后对十进制数取整,循环。得到数组中的数就是R进制的反序的数,然后通过
循环得到最后答案)
2.构造整体框架
(需要的循环 条件等等结构 用switch来解决10-15转化为abcde的问题)
3.补充代码
(2-10进制是一类 11-16进制是一类)
4检查分析中间漏洞
(比如条件上的严谨问题,范围,输出的范围等等)
注:我也才学,希望不足之处多多指出,可能很多地方没有很好的优化,共同进步吧!
*/
#include <stdio.h>
int system(int,int);
int main()
{
int a1,s1;
printf("请输入十进制数:\n");
scanf("%d",&a1);
printf("请输入要转化的进制数:\n");
scanf("%d",&s1);
system(a1,s1);
return 0;
}
int system(int a,int s)
{
int ages[20] = {0};
int k = 0;
int a2 = a;
if (s > 16)
{
printf("超出16进制!");
}
else if (s > 10)
{
while (a2)
{
ages[k] = a2 % s;
a2 = a2 / s;
switch (ages[k])
{
case 10:
ages[k] += 87;
break;
case 11:
ages[k] += 87;
break;
case 12:
ages[k] += 87;
break;
case 13:
ages[k] += 87;
break;
case 14:
ages[k] += 87;
break;
case 15:
ages[k] += 87;
break;
default:
ages[k] += 48;
break;
}
k++;
}
printf("十进制数:%d 转化为%d进制数是:",a,s);
for (k = k-1;k >= 0 ;k--)
{
printf("%c",ages[k]);
}
}
else
{
//因为a = a/s所以存在a=0,即退出循环
while (a2)
{
ages[k] = a2 % s;
k++;
a2 = a2 / s;
}
printf("十进制数:%d 转化为%d进制数是:",a,s);
for (k = k-1;k >= 0 ;k--)
{
printf("%d",ages[k]);
}
}
printf("\n");
}
复制代码
作者:
disgusting
时间:
2014-6-14 19:46
69042011 发表于 2014-6-14 12:45
好的谢谢我会好好看的。
作者:
disgusting
时间:
2014-6-15 23:11
69042011 发表于 2014-6-14 12:45
代码没问题,但是为什么反序可以求出进制啊,机理是啥能帮我解释下么 QAQ
作者:
disgusting
时间:
2014-6-15 23:40
哈哈有点自虐的想把题目改成任意10进制实数哈哈
作者:
王海江1
时间:
2014-6-15 23:47
69042011 发表于 2014-6-14 12:45
大神,,,,
作者:
disgusting
时间:
2014-6-15 23:55
有点研究懂了
作者:
disgusting
时间:
2014-6-16 00:31
懂了。。。ASCII 表太神奇了
作者:
69042011
时间:
2014-6-16 22:58
disgusting 发表于 2014-6-15 23:11
代码没问题,但是为什么反序可以求出进制啊,机理是啥能帮我解释下么 QAQ ...
//(ages[k] = a2 % s; k++;
a2 = a2 / s; ) a2是你输入的十进制 比如说你要转化为2进制 s为2 对2求余不是0就是1 ,你用一般转化方法写出来,得到的10也是从最下面的数往上看 记得不
6%2
=0
6/2
3
3%2
=1
3/2
1
1%2
=1
1/2
0(为假退出循环)
你得到的不是011 是110 ,同理先存入0再存入1再存入1 你取数组的时候就要先取第三个 再取带二个 最后第一个
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2