3个回答
展开全部
1、正负用一个整数sign记录;
2、整数部分,除P求余,逐位存入一个数组,直到商为0;
3、小数部分,乘P求商,整数部分逐位存入一个数组,直到结果为0或者达到指定的位数。
4、将正负号、整数部分、小数点、小数部分,逐位输出。
5、P大于十时指定表现方法,比如用英文字母,P大于36,可能还要其他表达方式。
#include <stdio.h>
#include <math.h>
int main()
{
int zs,p,i;
float s,xsw,xab;
int sign,zl,xl,zsw[10],xs[10];
printf("please input p:");
do scanf("%d",&p); while ((p<2));
printf("please input a fload:");
scanf("%f",&s);
if (s>0) sign=1;
else if (s<0) sign=-1;
else sign=0;
xab=fabs(s);
zs=(int)xab;
xsw=xab-zs;
for (zl=0;zl<10;zl++)
{
zsw[zl]=zs % p;
zs=zs/p;
if(zs==0) break;
};
for(xl=0;xl<10;xl++)
{
xs[xl]=xsw*p;
xsw=xsw*p-xs[xl];
if (xsw==0) break;
}
/*直接用每位上的十进制数表示,位与位之间用空格分隔*/
printf("\n the float at %d decimal is:",p);
if (sign==-1) printf("-");
do {printf("%d ",zsw[zl]);zl--;} while (zl>=0);
printf(".");
for(i=0;(i<=xl)&&(i<10);i++) printf(" %d",xs[i]);
printf("\n");
getchar();getchar();
return 0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询