ในบทช่วยสอนนี้ เราจะเขียนโปรแกรมเพื่อหาว่าตัวเลขที่กำหนดเป็น kaprekar number หรือไม่
นำตัวเลขมายกกำลังสอง แล้วแบ่งผลลัพธ์เป็นสองส่วน ถ้าผลรวมของสองส่วนนั้นเท่ากับตัวเลขเดิม ตัวเลขนั้นจะเรียกว่า kaprekar number
ขั้นตอนการแก้ปัญหา
- กำหนดค่าเริ่มต้นของ n
- หาค่ายกกำลังสองของ n
- หาจำนวนหลักของค่ายกกำลังสองและเก็บไว้ในตัวแปร
- หารค่ายกกำลังสองของ n ด้วย 10, 100, 1000, ฯลฯ จนครบจำนวนหลัก
- ตรวจสอบว่าผลรวมของส่วนใดส่วนหนึ่งเท่ากับ n หรือไม่
- คืนค่า True ถ้าเท่ากัน มิฉะนั้น False
ตัวอย่างโค้ด
#include<bits/stdc++.h>
using namespace std;
bool isKaprekarNumber(int n) {
if (n == 1) {
return true;
}
int nSquare = n * n, digitsCount = 0;
while (nSquare) {
digitsCount++;
nSquare /= 10;
}
nSquare = n * n;
for (int i = 1; i < digitsCount; i++) {
int parts = pow(10, i);
if (parts == n) {
continue;
}
int sum = nSquare / parts + nSquare % parts;
if (sum == n) {
return true;
}
}
return false;
}
int main() {
int n = 25;
string result = isKaprekarNumber(n) ? "True" : "False";
cout << result << endl;
return 0;
}
ผลลัพธ์
หากรันโค้ดด้านบน จะได้ผลลัพธ์ดังนี้:
False
สรุป
หากมีข้อสงสัยเกี่ยวกับบทช่วยสอนนี้ สามารถถามได้ในส่วนความคิดเห็น