用c语言写一个函数,输入一个十进制数,输出对应的N进制数,求解

2024-11-12 18:01:26
推荐回答(3个)
回答1:

//十进制转其它进制
#include 
#define charset "0123456789ABCDEFGHIJKLMNOPQ"
int longtoother(long x,int n,char *p){//整数部分转换进制 ,返回数字长度 
int i=0,k,m,mm;
char *pp=p;
if (x==0){*p='0'; *(p+1)=0; return 1; }
else{
while(x!=0){   //i用于计数共多少位 
k=x%n; *pp=charset[k];
pp++; x/=n; i++;
}
*pp=0; m=i;
for(i=m-1,k=0;i>k;i--,k++){
mm=p[i];p[i]=p[k];p[k]=mm;
}
return m;
}
}
char *dectoother(double x,int n,char *p,int xx){  //xx用于指定小数位长度 
int i,m;
long xi;
double xf;
char *pp=p;
xi=(long)x;   //整数部分 
xf=x-xi;      //小数部分
m=longtoother(xi,n,pp); //转换整数部分 
if(xf==0) {p[m]=0; return p;}
p[m]='.';
for(i=1;i<=xx;i++){  //转换小数部分 
xf=xf*n;
xi=(long)xf;
p[m+i]=charset[xi];
xf=xf-xi;
if (xf==0) {p[m+i+1]=0; break;}
}
}
char *Dectoother(double x,int n,char *p){  //把x转换成n进制数 
if (x<0) {   //如果是负数 
*p='-';
   dectoother(-x,n,p+1,16);
}
else
dectoother(x,n,p,16);
return p;
}
int main(){
char str[100];
int n=16;
double x=180.125;
printf("%lf的%d进制是:%s\n",x,n,Dectoother(x,n,str));
}

回答2:

#include 
void func(unsigned long x,int n,int flag);
int main(void)
{
unsigned long x;
int n;
scanf("%lu%d",&x,&n);
func(x,n,1);
return 0;
}
void func(unsigned long x,int n,int flag)
{
if(!x)
{
if(flag)
{
putchar('0');
}
return;
}
func(x/n,n,0);
putchar(x%n<10?'0'+x%n:'A'+x%n-10);
}

回答3:

http://blog.csdn.net/xkzju2010/article/details/45717331
看懂这个,就会D进制的了。