美文网首页
循环节为abc,求最简分子数

循环节为abc,求最简分子数

作者: Ell1ot | 来源:发表于2019-04-25 09:24 被阅读0次
题目

0.abcabc......循环节为abc,将其化成最简分数,分子有多少种,编程实现。

思路

1.题目与无限循环小数,循环节相关,与之前的通过余数寻找循环节的题目相似,因此初始思路是利用余数,循环节长度找到分子与abc的关系。

2.但循环节长度确定为3,格式确定为0.abc...,应该有更简便的方式将其转化为分数形式,于是搜索找到:
0.a... * 10 - 0.a... = a.a... - 0.a...
0.a... * (10-1) = a
0.a... = a / 9
同理可得:
0.abc... * 1000 - 0.abc... = abc.abc... - 0.abc...
0.abc... * (1000-1) = abc
0.abc... = abc / 999

3.题目被转换成 abc / 999 在最简形式下分子有多少种。
abc的范围可以确定为1-999(0明显不成立),分子可能出现重复的情况为:abc与999(3 * 3 * 3 * 37)拥有共同因数,分数被约分,分子的值重复出现。因此通过循环判断abc在各值时是否能够被3与37整除可以得到答案。
当时想到以下结构:


微信截图_20190425092725.png

当abc为3、9、27的倍数时,分子被化为abc/3、abc/9、abc/27。由于abc取值上线为999,还可能出现abc为81的倍数,243的倍数等,此时abc仍然只能被化为abc/27,因为999的可提供的因数只到27。例如当abc为81(3 * 37)时,分数的值为3/37,分子3第一次出现(之前出现时可以被约分化简)。abc为243的倍数时同理。
因此,还需要在判断时增加abc无法被81整除的约束。

代码
#include <stdio.h>
int main()
{
    int num=0;
    for (int i = 1; i <= 999; i++)
    {
        if ((i % 3 == 0 || i % 37 == 0)&&i%81!=0)
            ;
        else
            num++;
    }
    printf("%d", num);
}

相关文章

  • 循环节为abc,求最简分子数

    题目 0.abcabc......循环节为abc,将其化成最简分数,分子有多少种,编程实现。 思路 1.题目与无限...

  • 记录20200830

    LeetCode 214题,最短回文数 利用 Python 切片 KMP解法 比如求 s = "abc" 的最短回...

  • 5-1. 约分最简分式

    分数可以表示为“分子/分母”的形式。编写一个程序,要求用户输入一个分数,然后将其约分为最简分式。最简分式是指分子和...

  • 有一个三位数,个位是c,十位是b,百位是a,求满足abc + c

    /* 3,有一个三位数,个位是c,十位是b,百位是a,求满足abc + cba = 1333的abc */publ...

  • 14. abc

    题目描述 设a、b、c均是0到9之间的数字,abc、bcc是两个三位数,且有:abc+bcc=532。求满足条件的...

  • iOS排列组合算法

    问题1、求长度为N的字符串的所有排列,如字符串abc所有排列为:abc,acb,bac,bca,cab,cba。问...

  • 辗转相除法的应用

    题目: 设计实现抽象数据结构"有理数",基本操作包括有理数的加减乘除,以及求有理数的分子分母 思路: 设计这个数据...

  • 34. 最简真分数

    题目描述 给出n个正整数,任取两个数分别作为分子和分母组成最简真分数,编程求共有几个这样的组合。 输入描述: 每组...

  • 求2个数相除的循环节

    要求:给定2个数(整数或小数均可),相除得到结果,如果结果有循环节,请打印出其循环节。

  • 【公考】分子的率

    分子的率,顾名思义就是求分子的同比增长率,用公式表示就是“A=B/C”,求B的同比增长率。 B一般为部分的值,C一...

网友评论

      本文标题:循环节为abc,求最简分子数

      本文链接:https://www.haomeiwen.com/subject/jtkvgqtx.html