不才写了个小程序,欢迎大家批评
程序代码:
/*-----------------------------------------------------------------------------
用C语言编写输入一个整数,输出二进制数,八进制数,十六进制数.
============================================================================
这里输入的数据类型定为 float ,结束转换用CTRL+Z,希望不用很长时间就
可以写出超出100位的大数的转换。
============================================================================
程序作完了之后,简单测试了下,感觉应该是没有错误。欢迎各位朋友测试,
并指出错误之处。谢谢大家。
学习学习再学习。
----------------------------------------------------------------------------*/
#include<stdio.h>
#define N 20
char *s="0123456789abcde"; /* 定义个字符串指针,用于输出 */
int INT[N]; /* 用于存放转换后的数据 */
void SWITCH(float a,int d) /* 转换的函数 */
{
int _int;
int i=0,j;
_int=a; /* 把小数部分去掉 */
while(_int)
{
INT[i]=_int%d;/*存放数据,把该数值模以进制,其结果就是转换后的数值*/
i++;
_int/=d; /* 把该数值除以进制,得出整数部分,如果不为零,继续转换*/
}
for(j=i;j>=0;--j)
printf("%c",*(s+INT[j])); /* 输出转换后的整数部分 */
if(a-(int)a>0.0) /* 如果这个数值有小数部分,就进行下面的程序*/
{
i=0; /* 下标赋初值 */
a-=(int)a; /* 得出小数部分 */
while(a!=0.0)
{
INT[i]=(int)(a*d); /* 存入数据,该数值乘以进制,其整数部分就是转换后的数值*/
a=(a*d)-(int)(a*d);/* 把整数部分去除,如果不为零,继续转换 */
i++;
}
printf("."); /* 输出小数点 */
for(j=0;j<i;++j)
printf("%c",*(s+INT[j])); /* 输出小数部分 */
}
printf("\n");
}
int main(void)
{
int n;
float a;
printf("input n a:\n");
while((scanf("%d %f",&n,&a))!=EOF) /* 输入数值,第一个输入进制,第二个输入数值 */
SWITCH(a,n); /* 当输入不为EOF时,进行转换 */
return 0;
}
[[it] 本帖最后由 广陵绝唱 于 2008-11-29 02:05 编辑 [/it]]