输入一个十进数,将其转换成 N 进制数(0<N<=16)。
支持小数和负数的版本:
#include<stdio.h>
#define BufferSize 30
int main()
{
double f,g;
int i,N;
char buf[BufferSize];
char Charactor[] = "0123456789ABCDEF";
scanf("%lf%d", &f, &N);
// 处理负数
if( f<0.0 )
{
printf("-");
f = -f;
}
// 保存小数部分
g = f-((double)(int)f);
// 处理整数部分
i = BufferSize-1;
buf[i--] = '/0';
while( f >= 1.0 )
{
int c = ((int)f)%N;
buf[i--] = Charactor[c];
f /= ((double)N);
}
printf("%s", buf+i+1);
// 处理小数部分
if( g==0.0 )
{
printf("/n");
return 0;
}
printf(".");
i = 0;
while( g != 0.0 )
{
int c = (int)(g*((double)N));
printf("%c", Charactor[c]);
g = g*((double)N)-((double)c);
++i;
if( i==10 ) // 最多显示10位,避免因无限循环小数而出现的死循环
break;
}
printf("/n");
return 0;
}
支持小数和负数的版本:
#include<stdio.h>
#define BufferSize 30
int main()
{
double f,g;
int i,N;
char buf[BufferSize];
char Charactor[] = "0123456789ABCDEF";
scanf("%lf%d", &f, &N);
// 处理负数
if( f<0.0 )
{
printf("-");
f = -f;
}
// 保存小数部分
g = f-((double)(int)f);
// 处理整数部分
i = BufferSize-1;
buf[i--] = '/0';
while( f >= 1.0 )
{
int c = ((int)f)%N;
buf[i--] = Charactor[c];
f /= ((double)N);
}
printf("%s", buf+i+1);
// 处理小数部分
if( g==0.0 )
{
printf("/n");
return 0;
}
printf(".");
i = 0;
while( g != 0.0 )
{
int c = (int)(g*((double)N));
printf("%c", Charactor[c]);
g = g*((double)N)-((double)c);
++i;
if( i==10 ) // 最多显示10位,避免因无限循环小数而出现的死循环
break;
}
printf("/n");
return 0;
}