标题:输出无限循环小数的循环节
只看楼主
逢考必过阿俊
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2022-1-15
结帖率:50%
已结贴  问题点数:20 回复次数:5 
输出无限循环小数的循环节
自己想到的方法就是使用数组,如果一个数字两次出现就记录两次下标,然后从两个下标开始一位一位地向后比较。不过这个方法有问题,而且自己写出来的程序非常繁琐,所以想请教一下这道题的程序要怎么写?
搜索更多相关主题的帖子: 小数 输出 方法 无限 循环 
2022-01-15 22:51
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:20 
我随手写的,不保证无误,仅供参考

程序代码:
#include <stdio.h>

void foo( unsigned m, unsigned n )
{
    printf( "%u", m/n );
    m %= n;
    if( m != 0 )
    {
        putchar( '.' );
        unsigned mark[100] = { 0 };
        for( unsigned i=1; m!=0; ++i )
        {
            if( mark[m] != 0 )
            {
                printf( "\nfrom %u to %u", mark[m], i-1 );
                break;
            }
            else
            {
                mark[m] = i;

                putchar( '0' + m*10/n );
                m = m*10%n;
            }
        }
    }
    putchar( '\n' );
    return;
}

int main( void )
{
    foo( 100, 2 );
    foo( 100, 3 );
    foo( 136, 90 );
    foo( 77, 78 );
}
2022-01-16 13:06
逢考必过阿俊
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2022-1-15
得分:0 
回复 2楼 rjsp
是的,就是这样,谢谢你!
2022-01-19 10:38
逢考必过阿俊
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2022-1-15
得分:0 
回复 2楼 rjsp
请问foo函数里面的m = m*10%n 是什么作用呢,可以简单解释一下吗?它和求最大公约数时用的取模运算是不是一个原理呀?
2022-01-19 11:02
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
回复 4楼 逢考必过阿俊
这是“竖式除法”呀, 当前的余数 乘以 10,然后再除以 除数
2022-01-20 14:04
逢考必过阿俊
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2022-1-15
得分:0 
回复 5楼 rjsp
噢,是这样啊,谢谢你!
2022-01-24 16:21



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-508156-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.237797 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved