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

ค้นหาระยะเวลาในค่าทศนิยม 1/n ใน C++


สมมติว่าเรามีตัวเลข 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