Problem 26
A unit fraction contains 1 in the numerator. The decimal representation of the unit fractions with denominators 2 to 10 are given:
1/2
=
0.5
1/3
=
0.(3)
1/4
=
0.25
1/5
=
0.2
1/6
=
0.1(6)
1/7
=
0.(142857)
1/8
=
0.125
1/9
=
0.(1)
1/10
=
0.1
Where 0.1(6) means 0.166666..., and has a 1-digit recurring cycle. It can be seen that1/7 has a 6-digit recurring cycle.
Find the value of d < 1000 for which 1/d contains the longest recurring cycle in its decimal fraction part.
C++:
#include <iostream>
using namespace std;
const int N = 1000;
const int MAXDIGITS = 4096;
int decimal[MAXDIGITS];
int numerator[MAXDIGITS];
int getcycles(int d)
{
int n = 1, start, end, i, j;
i=0;
numerator[i] = n % d;
decimal[i] = numerator[i] * 10 / d;
for(i=1; ;i++) {
numerator[i] = numerator[i-1] * 10 % d;
decimal[i] = numerator[i] * 10 / d;
for(j=0; j<i; j++)
if(numerator[j] == numerator[i])
break;
if(j < i) {
start = j;
end = i - 1;
break;
}
if(numerator[i] == 0) {
start = i;
end = i;
break;
}
}
return end - start + 1;
}
int main()
{
int ans, max = 0, cycles;
for(int i=1; i<N; i++) {
cycles = getcycles(i);
if(cycles > max) {
max = cycles;
ans = i;
}
cout << i << ": " << cycles << endl;
}
cout << ans << endl;
return 0;
}
参考链接:UVA202 UVALive5141 Repeating Decimals