编程论坛
注册
登录
编程论坛
→
C语言论坛
输出无限循环小数的循环节
逢考必过阿俊
发布于 2022-01-15 22:51, 1502 次点击
自己想到的方法就是使用数组,如果一个数字两次出现就记录两次下标,然后从两个下标开始一位一位地向后比较。不过这个方法有问题,而且自己写出来的程序非常繁琐,所以想请教一下这道题的程序要怎么写?
只有本站会员才能查看附件,请
登录
5 回复
#2
rjsp
2022-01-16 13:06
我随手写的,不保证无误,仅供参考
程序代码:
#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
);
}
#3
逢考必过阿俊
2022-01-19 10:38
回复 2楼 rjsp
是的,就是这样,谢谢你!
#4
逢考必过阿俊
2022-01-19 11:02
回复 2楼 rjsp
请问foo函数里面的m = m*10%n 是什么作用呢,可以简单解释一下吗?它和求最大公约数时用的取模运算是不是一个原理呀?
#5
rjsp
2022-01-20 14:04
回复 4楼 逢考必过阿俊
这是“竖式除法”呀, 当前的余数 乘以 10,然后再除以 除数
#6
逢考必过阿俊
2022-01-24 16:21
回复 5楼 rjsp
噢,是这样啊,谢谢你!
1