Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

หาความยาวรอบของค่าทศนิยม 1/n ใน C++

สมมติว่ามีตัวเลข n เราต้องหาความยาวของรอบ (Period) ในค่าทศนิยมของ 1/n ดังนั้นถ้าค่า n เป็น 7 แล้ว 1/7 = 0.142857142857… ส่วนที่ตัวหนาคือส่วนที่ซ้ำ ดังนั้นความยาวของรอบคือ 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