解题思路:
1.输入分子x,分母y,求出x/y存入num;

2.根据小数部分进制转换思路:

(1):设转换进制为jinzhi=3进制;

(2):假设小数为1/4=0.25

①:0.25 * 3= 0.75  整数部分为0,小数部分为0.75

②:0.75 * 3= 2.25  整数部分为2,小数部分为0.25

③:0.25 * 3= 0.75  整数部分为0,小数部分为0.75

④:0.75 * 3= 2.25  整数部分为2,小数部分为0.25

.............

(3):把整数部分写下来为0202......这就是0.25转换为三进制后,对应小数点后面的数;

(4):我们假设精度为小数点后面三位,则0.25---->0.021,比方10进制数,大于等于5的进位,这里3进制数,就是大于等于1.5的进位,很显然0.0202保留三位小数就是 0.021;

(5):题目要求保留小数点后面10位,所上面求整数部分过程要求11次;

(6):最后进位(满3进1),注意:如三进制小数0.22222,要求保留4为小数的话,不是简单的向前面一位进1就结束,(因为进1后为0.2223,三进制是不能有3的,故满三还得进1);


参考代码:

#include <stdio.h>
void output_three( double num );

int jinzhi = 3;//可换为其它进制
/*-----------------------------------------*/
int main()
{
    int    x, y;
    double    num;

    while ( scanf( "%d/%d", &x, &y ) != EOF )
    {
        num = 1.0 * x / y;//乘1.0转化为浮点型
        output_three( num );
    }
    return(0);
}

/*-----------------------------------------*/
void output_three( double num )
{
    int A[11];

    for ( int i = 0; i < 11; i++ )
    {
        num    *= jinzhi;
        A[i]    = (int) num;
        num    -= A[i];
    }
    if ( A[10] >= 1.0 * jinzhi / 2 )//三进制的‘四舍五入’
        A[9] += 1;

    for ( int j = 9; j > 0; j-- )//进位,小数点后第一位为3时,不进到个位
    {
        if ( A[j] == 3 )
        {
            A[j - 1]    += 1;
            A[j]        = 0;
        }
    }

    printf( "." );   //输出结果
    for ( int k = 0; k < 10; k++ )
        printf( "%d", A[k] );
    printf( "\n" );

    return;
}

别忘点赞哦-.-!

点赞(22)
 

0.0分

10 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论