/*
* 思路: 1)打表,记录1-1990的小数
* 2)寻找其周期
*/
#include<stdio.h>
#include<string.h>
int main()
{
int a, b, i = 0;
char s[2000];
scanf("%d%d", &a, &b);
printf("%d.(", a/b);
while(1) {
s[i++] = a*10/b + '0';
a = a*10%b;
if(i > 1990) break;
}
int l = strlen(s);
int k;
for(k = 1; k < l; k++) {
int flag = 1;
for(int j = 0; j < k; j++) {
for(int p = 1; p*k < l/k; p++) {
if(s[j] != s[j + p*k]) {
flag = 0;
break;
}
}
}
if(flag) break;
}
s[k] = '\0';
printf("%s)\n循环节长度为: %d", s, k);
return 0;
}
习题 3-8 循环小数(Repeating Decimals,ACM/ICPC World Finals 1990,Uva 202)
最新推荐文章于 2021-03-18 14:44:20 发布