ในปัญหานี้ เราจะพยายามหาเลข K ที่ใหญ่ที่สุด ซึ่งหารด้วย X ลงตัว เมื่อต้องการทำภารกิจนี้ เราจะใช้เลข K ที่ใหญ่ที่สุดตามสูตรนี้ ((10^k) – 1) แล้วตรวจดูว่าตัวเลขหารด้วย X ลงตัวหรือไม่ ถ้าไม่ เราจะได้จำนวนที่แน่นอนโดยใช้สูตรนี้
𝑚𝑎𝑥−(𝑚𝑎𝑥 𝑚𝑜𝑑 𝑋)
ตัวอย่างหนึ่งเหมือนกับตัวเลข 5 หลัก ที่หารด้วย 29 ลงตัว ดังนั้นจำนวน 5 หลักที่ใหญ่ที่สุดคือ 99999 ซึ่งหารด้วย 29 นี้ไม่ลงตัว เราจะได้สูตรนี้มา -
99999−(99999 𝑚𝑜𝑑 29)=99999−7=99992
ตัวเลข 99992 หารด้วย 29 ลงตัว
อัลกอริทึม
maxKDigit(k, x)
begin max = (10^k) - 1 if max is divisible by x, return max otherwise return max – (max mod x) end
ตัวอย่าง
#include<iostream> #include<cmath> using namespace std; long max_k_digit(int k, int x){ //get the maximum number of k digits int max = pow(10, k) - 1; if(max % x == 0){ return max; } return (max) - (max % x); } main() { int k, x; cout << "Enter Digit Count(K) and Divisor(N): "; cin >> k >> x; cout << "Result is: " << max_k_digit(k, x); }
ผลลัพธ์
Enter Digit Count(K) and Divisor(N): 5 29 Result is: 99992
ผลลัพธ์
Enter Digit Count(K) and Divisor(N): 6 87 Result is: 999978