C语言练习 n进制x转换为m进制
--------------------------------------------------------------------------------
题目: 编程实现任意的n进制转换为m进制(n,m在2-10之间)
参考程序:
#i nclude <stdio.h>
#i nclude <stdlib.h>
long int NtoTen(int,long int);
long int TentoM(int,long int);
int test(int,long int);
long int NtoTen(int n,long int x)
{
int i;
long int s=0;
i=1;
do
{
s+=x%10*i;
i=i*n;
x/=10;
}while(x>0);
return s;
}
long int TentoM(int m,long int y)
{
int a[100],i=0,k,j=1;
long int s=0;
do
{
a[i++]=y%m;
y/=m;
}while(y>m);
a[i]=y;
for(k=0;k<=i;k++)
{
s+=a[k]*j;
j*=10;
}
return s;
}
int test(int n,long int x)
{
int a[100],i=0,k;
do
{
a[i++]=x%10;
x/=10;
}while(x>0);
for(k=0;k<i;k++)
if(a[k]>=n) return 0;
return 1;
}
int main()
{
int N,M,k=0;
long int x,y,z;
do
{
printf("input N,x,M:");
scanf("%d%ld%d",&N,&x,&M);
k=test(N,x);
}while(N>10 || N<1 || M>10 || N<1 || k==0 );
y=NtoTen(N,x);
z=TentoM(M,y);
printf("%d(%d) is %d(%d)",x,N,M,z);
system("PAUSE");
return 1;
}
如果考虑范围放大到16进制内将复杂的多,以后再分析。