用c语言编写读 自然数m和n(0<m<n≤1000),判分数m/n是有限小数还是循环小数如果m/n是有限小数,则输出分数的值;如果m/n为循环小数,则把循环部分括在括号中打印输出
时间: 2024-05-10 09:19:24 浏览: 11
以下是使用C语言编写的程序,可以实现读取自然数m和n,判断m/n是有限小数还是循环小数,并输出相应的结果:
```c
#include <stdio.h>
int main() {
int m, n;
printf("请输入两个自然数m和n(0<m<n<=1000):");
scanf("%d%d", &m, &n);
printf("%d/%d=", m, n);
// 判断是否为有限小数
if (n % 2 == 0 || n % 5 == 0) {
printf("%d.%d\n", m / n, (m % n) * 10 / n);
} else {
int r = m % n;
int s[1001] = {0}; // 用于判断循环节是否出现过
int i = 0, j = 0;
printf("%d.", m / n);
while (r != 0 && s[r] == 0) {
s[r] = ++i;
r *= 10;
printf("%d", r / n);
r %= n;
}
if (r == 0) { // 无循环节
printf("\n");
} else { // 有循环节
printf("(");
for (j = s[r]; j <= i; j++) {
printf("%d", (m * 10 * (j - 1) % n) / n);
}
printf(")\n");
}
}
return 0;
}
```
程序中先读取用户输入的自然数m和n,然后根据n是否能够被2或5整除来判断m/n是否为有限小数。如果是有限小数,则直接输出分数的值;如果是循环小数,则需要找到循环节并输出。
为了找到循环节,我们可以用一个数组s来记录每次求余得到的余数是否出现过。如果某个余数已经出现过,说明找到了循环节,此时就可以将循环节括在括号中输出了。