題目
0.abcabc......循環(huán)節(jié)為abc套菜,將其化成最簡分?jǐn)?shù),分子有多少種舔涎,編程實現(xiàn)笼踩。
思路
1.題目與無限循環(huán)小數(shù),循環(huán)節(jié)相關(guān)亡嫌,與之前的通過余數(shù)尋找循環(huán)節(jié)的題目相似嚎于,因此初始思路是利用余數(shù),循環(huán)節(jié)長度找到分子與abc的關(guān)系挟冠。
2.但循環(huán)節(jié)長度確定為3于购,格式確定為0.abc...,應(yīng)該有更簡便的方式將其轉(zhuǎn)化為分?jǐn)?shù)形式知染,于是搜索找到:
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.題目被轉(zhuǎn)換成 abc / 999 在最簡形式下分子有多少種肋僧。
abc的范圍可以確定為1-999(0明顯不成立),分子可能出現(xiàn)重復(fù)的情況為:abc與999(3 * 3 * 3 * 37)擁有共同因數(shù)控淡,分?jǐn)?shù)被約分嫌吠,分子的值重復(fù)出現(xiàn)。因此通過循環(huán)判斷abc在各值時是否能夠被3與37整除可以得到答案掺炭。
當(dāng)時想到以下結(jié)構(gòu):
當(dāng)abc為3辫诅、9、27的倍數(shù)時涧狮,分子被化為abc/3炕矮、abc/9么夫、abc/27。由于abc取值上線為999肤视,還可能出現(xiàn)abc為81的倍數(shù)档痪,243的倍數(shù)等,此時abc仍然只能被化為abc/27邢滑,因為999的可提供的因數(shù)只到27腐螟。例如當(dāng)abc為81(3 * 37)時,分?jǐn)?shù)的值為3/37殊鞭,分子3第一次出現(xiàn)(之前出現(xiàn)時可以被約分化簡)遭垛。abc為243的倍數(shù)時同理。
因此操灿,還需要在判斷時增加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);
}