问题描述
我已经知道,当一个分数循环小数。这里是功能
I already know when a fraction is repeating decimals. Here is the function.
public bool IsRepeatingDecimal
{
get
{
if (Numerator % Denominator == 0)
return false;
var primes = MathAlgorithms.Primes(Denominator);
foreach (int n in primes)
{
if (n != 2 && n != 5)
return true;
}
return false;
}
}
现在,我试图让重复的次数。我检查这个网站:http://en.wikipedia.org/wiki/Repeating_decimal
Now, I'm trying to get the repeated number. I'm checking this web site: http://en.wikipedia.org/wiki/Repeating_decimal
public decimal RepeatingDecimal()
{
if (!IsRepeatingDecimal) throw new InvalidOperationException("The fraction is not producing repeating decimals");
int digitsToTake;
switch (Denominator)
{
case 3:
case 9: digitsToTake = 1; break;
case 11: digitsToTake = 2; break;
case 13: digitsToTake = 6; break;
default: digitsToTake = Denominator - 1; break;
}
return MathExtensions.TruncateAt((decimal)Numerator / Denominator, digitsToTake);
}
不过,我真正意识到,有些数字有部分十进制有限,后来无限。例如:1/28
But I really realized, that some numbers has a partial decimal finite and later infinite. For example: 1/28
你知道一个更好的方式来做到这一点?或算法?
Do you know a better way to do this? Or an Algorithm?
推荐答案
一个很简单的算法是这样的:执行长除法。记录你做的每一个中间划分。当你看到一个分裂等同于一个你以前做过,你有什么东西被重复。
A very simple algorithm is this: implement long division. Record every intermediate division you do. As soon as you see a division identical to the one you've done before, you have what's being repeated.
例如:7/13
1. 13 goes into 7 0 times with remainder 7; bring down a 0.
2. 13 goes into 70 5 times with remainder 5; bring down a 0.
3. 13 goes into 50 3 times with remainder 11; bring down a 0.
4. 13 goes into 110 8 times with remainder 6; bring down a 0.
5. 13 goes into 60 4 times with remainder 8; bring down a 0.
6. 13 goes into 80 6 times with remainder 2; bring down a 0.
7. 13 goes into 20 1 time with remainder 7; bring down a 0.
8. We have already seen 13/70 on line 2; so lines 2-7 have the repeating part
该算法为我们提供了538461作为重复的部分。我的计算器说7/13是0.538461538。看起来我的权利!这一切仍然是实现细节,还是找一个更好的算法!
The algorithm gives us 538461 as the repeating part. My calculator says 7/13 is 0.538461538. Looks right to me! All that remains are implementation details, or to find a better algorithm!
这篇关于如何知道一小部分的重复小数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!