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

题目

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);
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,438评论 0 2
  • 专业考题类型管理运行工作负责人一般作业考题内容选项A选项B选项C选项D选项E选项F正确答案 变电单选GYSZ本规程...
    小白兔去钓鱼阅读 9,092评论 0 13
  • 第一章数和数的运算 一概念 (一)整数 1整数的意义 自然数和0都是整数。 2自然数 我们在数物体的时候,用来表示...
    meychang阅读 2,714评论 0 5
  • 1. 关于诊断X线机准直器的作用,错误的是()。 (6.0 分) A. 显示照射野 B. 显示中心线 C. 屏蔽多...
    我们村我最帅阅读 10,896评论 0 5
  • 1. 下列叙述错误的是()。 (2.0 分) A. 质量管理包括QA和QC一切活动的全部过程 B. 影像质量是指对...
    我们村我最帅阅读 4,113评论 0 8