c语言小数点进制转换,新手求教,关于含小数的二进制转换成十进制
該樓層疑似違規已被系統折疊?隱藏此樓查看此樓
#include
#include
void main()
{
int i=0,n,j,a[20],b[20],k,c=0;
double m,x,d;
printf("input number to convert:");
scanf("%lf",&x);
printf("jinzhi to convert(1
scanf("%d",&n);
if(x<0)
m=fabs(x);
else
m=x;
k=(int)m;//強制類型轉換,可以使用k=(int)m;代替,從而更加的一目了然
while(k)//判定需要轉換的數是否變為0
{
a[i++]=k%n;//取余,進行進制轉換,但是順序與正確值相反
k/=n;//轉換一位之后進行相應的變化
}
if(m!=(int)m)//選擇性計算,如果是整數就不用進行這一步的計算了,這樣可以節約程序的運行時間
{
d=m-(int)m;//取小數部分
while(d!=0)
{
b[c]=(int)(d*n);//算法為×N取整
d=d*n-b[c];
c++;
if(c>=10)
break;//主要是控制小數后面萬一出現無限小數的時候好跳出循環以免出現死循環
}
}
printf("轉換結果為:");
if(x<0)
printf("-");
for(j=i-1;j>=0;j--)//反序輸出,大于10的數字進行相應的變化
{
if(a[j]==10)
printf("A");
else
if(a[j]==11)
printf("B");
else
if(a[j]==12)
printf("C");
else
if(a[j]==13)
printf("D");
else
if(a[j]==14)
printf("E");
else
if(a[j]==15)
printf("F");
else
printf("%d",a[j]);
}
if(m!=(int)m)//選擇性輸出,這樣可以節約輸出時間和程序的運行時間
{
printf(".");
for(j=0;j
{
if(b[j]==10)
printf("A");
else
if(b[j]==11)
printf("B");
else
if(b[j]==12)
printf("C");
else
if(b[j]==13)
printf("D");
else
if(b[j]==14)
printf("E");
else
if(b[j]==15)
printf("F");
else
printf("%d",b[j]);
}
}
if(c>=10)//如果是無限小數則在后以省略號表示
printf("......");
printf("\n");//輸出換行,以使程序的輸出結果美觀
}
總結
以上是生活随笔為你收集整理的c语言小数点进制转换,新手求教,关于含小数的二进制转换成十进制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: postgresql c语言,Postg
- 下一篇: c语言已知斜率 求倾角,倾斜解的问题