十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
十进制转化成二进制是用2来展转相处,直到结果为1,然后把从最后的1开始,从下到上,把余数写出就是对应的二进制,如27/2=13...1
站在用户的角度思考问题,与客户深入沟通,找到固原网站设计与固原网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都做网站、成都网站制作、企业官网、英文网站、手机端网站、网站推广、域名注册、网站空间、企业邮箱。业务覆盖固原地区。
13/2=6...1
6/2=3....0
3/2=1....1写出来就是11011
唉,研究了一天,碰到对于10进制以上的就实在不会了。计算机不好表示啊。若要表示,就只有用字符数组。但用字符数组又会造成很多麻烦。
我只会写出10以内进制间及16进制的相互转换了。
思前想后,似乎只有这条思路是最为简单的:间接转换!
10以内任意进制先转换为十进制,然后由十进制再转换为新进制。
唉,一直编这题,都烦死了。
不想再把程序写出来了,只提供下思路,留给你自己编吧。
很抱歉,没能帮上你...
#include
stdio.h
#include
stdlib.h
//输入十进制数N和转化的进制数M
void
trans(int
n,int
m)
{
if(n)
{
trans(n/m,m);
if(n%m10)
printf("%c",n%m+'0');
else
printf("%c",n%m-10+'A');
}
}
void
main()
{
int
m,n,x;
char
ch;
printf("给定进制数M:");
scanf("%d",m);
loop:
printf("给定一个%d进制的数X:",m);
fflush(stdin);
//一个M进制的数X转10进制
for(x=0;;)
{
ch=getchar();
if(ch='0'
ch='9')
{
n=ch-'0';
}
else
if(ch='a'
ch='z')
{
n=ch-'a'+10;
}
else
if(ch='A'
ch='Z')
{
n=ch-'A'+10;
}
else
{
break;
}
if(n=m)
{
goto
loop;
}
x=x*m+n;
}
printf("转化成十进制数为:%d\n",x);
printf("给定要转化进制数M:");
scanf("%d",m);
printf("转化成%d进制后的结果为:",m);
trans(x,m);
printf("\n");
}
其他的方法:
trans函数也可以这样写:
void
trans(int
n,int
m)
{
char
str[100];
int
i;
for(i=0;n0;i++)
{
if(n%m10)
{
str[i]=n%m+'0';
}
else
{
str[i]=n%m-10+'A';
}
n=n/m;
}
for(n=i;n0;n--)
{
printf("%c",str[n-1]);
}
}
支持zpfloveyfy的分析,程序风格也很好。
我在这给个数制转换的公式:
十进制数N和其他d进制数的转换基于以下公式:
N
=
(N
div
d)
*
d
+
N
mod
d;
其中:div为整除,mod为求余。
例如将10进制1348转化成2504,运算过程如下:
N
Ndiv8
Nmod8
1348
168
4
168
21
21
2
5
2
2
看起来有点乱,因为这里会把原来的格式给打乱。
由最后一列4052可以看出,正好是结果2504的倒数,所以用栈来实现它是最理想不过的了。