OpenJudge百炼-2765-八进制小数-C语言-高精度计算

来源:互联网 发布:淘宝十大名店 编辑:程序博客网 时间:2024/05/18 12:33
描述:
八进制有限小数均可以用十进制有限小数精确地表示。比如,八进制里面的0.75等于十进制里面的0.963125 (7/8 + 5/64)。所有小数点后位数为n的八进制小数都可以表示成小数点后位数不多于3n的十进制小数。你的任务是写一个程序,把(0,1)之间的八进制小数转化成十进制小数。
输入:
一行,包含一个八进制小数。每个小数的形式是0.d1d2d3 ... dk,这里di是八进制数0...7,dk不等于0,而且已知0 < k < 15。
输出:
输入如下形式的一行
0.d1d2d3...dk [8] = 0.D1D2D3...Dm [10]
这里左边是输入的八进制小数,右边是相等的十进制小数。输出的小数末尾不能有0,也就是说Dm不等于0。注意空格位置。
样例输入:
0.75
样例输出:

0.75 [8] = 0.953125 [10]

/****************************************************文件名:百炼-2765**Copyright (c) 2015-2025 OrdinaryCrazy**创建人:OrdinaryCrazy**日期:20170910**描述:百炼2765参考答案**版本:1.1***************************************************/#include <stdio.h>#include <string.h>/***************************************************迭代法,一个大整数除8****************************************************/int main(){    char num[20];    int len,len10 = 0,i,j,num8[20],num10[60] = {0};    scanf("%s",num);    len = strlen(num);    for(i = len-1,j = 0;i > 1;i--,j++)        num8[j] = num[i] - '0';    len -= 2;    for(i = 0;i < len;i++)    {        num10[0] = num8[i];        int len_res,rem = num10[0];        for(len_res = 0;len_res < len10 || rem;)        {            num10[len_res] = rem / 8;            rem = (rem % 8) * 10 + num10[++len_res];        }        len10 = len_res;    }    printf("%s [8] = 0.",num);    for(i = 1;i < len10;i++)        printf("%d",num10[i]);    printf(" [10]\n");    return 0;}


阅读全文
0 0