สมมติว่าเรามีตัวเลข n เราต้องหาความยาวของคาบเป็นค่าทศนิยม 1/n ดังนั้นหากค่าของ n คือ 7 แล้ว 1/7 =0142857 142857… ส่วนนั้นที่เป็นตัวหนากำลังพูดซ้ำ ดังนั้นความยาวของคาบคือ 6.
สำหรับจำนวน n ผลลัพธ์สามารถมีได้ n เศษที่เหลือที่ชัดเจน แต่ช่วงเวลาอาจไม่เริ่มจากเศษแรกเนื่องจากเศษเริ่มแรกบางส่วนจะไม่ซ้ำกัน ดังนั้นเราต้องตรวจสอบให้แน่ใจว่าได้เลือกส่วนที่เหลือจากช่วงเวลา เริ่มจากเศษ (n+1) และเริ่มมองหาการเกิดขึ้นครั้งต่อไป ระยะห่างระหว่าง (n+1) ส่วนที่เหลือกับเหตุการณ์ถัดไป คือ ความยาวของคาบ
ตัวอย่าง
#include<iostream>
using namespace std;
int periodLength(int n) {
int remainder = 1;
int length = 0;
for (int i = 1; i <= n+1; i++)
remainder = (10*remainder) % n;
int d = remainder;
do {
remainder = (10*remainder) % n;
length++;
} while(remainder != d);
return length;
}
int main() {
int n = 7;
cout << "Period length of 1/"<<n<<" is: " << periodLength(n) << endl;
} ผลลัพธ์
Period length of 1/7 is: 6