1.4 KiB
1.4 KiB
To calculate the repeating-digit-count we use an algorithm based on the idea of a long division. Here on the example of 1/7
Position | Value | Remainder | Note |
---|---|---|---|
0 | 0, | 10/7 | 10/7 = 1 & (10%7)*10 = 30 |
1 | 0,1 | 30/7 | 30/7 = 1 & (30%7)*10 = 20 |
2 | 0,13 | 20/7 | 20/7 = 1 & (20%7)*10 = 60 |
3 | 0,132 | 60/7 | 60/7 = 1 & (60%7)*10 = 40 |
4 | 0,1328 | 40/7 | 40/7 = 1 & (40%7)*10 = 50 |
5 | 0,13285 | 50/7 | 50/7 = 1 & (50%7)*10 = 10 |
6 | 0,132857 | 10/7 | duplicate remainder -> loop closed |
=> RepeatingDigitCount := 6 - 0
= 6
We use a 1000-field "array" to remember every remainder we already had - as soon as we reach one that is already in use the digits start repeating itself.
For better understanding here the FindRepeatingDigitCount(int divisor) algorithm in pseudo-code:
int current = 1;
int position = 0;
while(true) {
current = (current*10) % divisor;
position++;
if (grid[current] != 0) return position - grid[current];
else grid[current] = position;
}