唉,研究了一天,碰到对于10进制以上的就实在不会了.计算机不好表示啊.若要表示,就只有用字符数组.但用字符数组又会造成很多麻烦.
思前想后,似乎只有这条思路是最为简单的:间接转换!
①.0以内任意进制先转换为十进制,然后由十进制再转换为新进制.
唉,一直编这题,都烦死了.
不想再把程序写出来了,只提供下思路,留给你自己编吧.
很抱歉,没能帮上你...
#include
stdio.h
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');
}
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'
n=ch-'0';
if(ch='a'
ch='z')
n=ch-'a'+10;
if(ch='A'
ch='Z')
n=ch-'A'+10;
break;
if(n=m)
goto
loop;
x=x*m+n;
printf("转化成十进制数为:%d\n",x);
printf("给定要转化进制数M:");
printf("转化成%d进制后的结果为:",m);
trans(x,m);
printf("\n");
其他的方法:
trans函数也可以这样写:
str[100];
i;
for(i=0;n0;i++)
str[i]=n%m+'0';
str[i]=n%m-10+'A';
n=n/m;
for(n=i;n0;n--)
printf("%c",str[n-1]);
支持zpfloveyfy的分析,程序风格也很好.
我在这给个数制转换的公式:
十进制数N和其他d进制数的转换基于以下公式:
N
=
(N
d)
*
d
+
mod
d;
看起来有点乱,因为这里会把原来的格式给打乱.