输入一个十进数,将其转换成 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;
}
本文介绍了一个C语言程序,该程序可以将输入的十进制数(包括小数和负数)转换为指定进制(0<N≤16)的数值。文章通过详细解释代码实现过程,帮助读者理解如何进行不同进制间的转换。

1万+

被折叠的 条评论
为什么被折叠?



