สมมติว่าเรามีจำนวนเต็ม N > 0 งานคือหาผลคูณของหลักสูงสุดในจำนวนที่น้อยกว่าหรือเท่ากับ N ถ้า N คือ 390 ผลลัพธ์คือ 216 เนื่องจากตัวเลข 389 ทำให้ได้ผลคูณสูงสุด 3 * 8 * 9 = 216
เพื่อแก้ปัญหานี้ เราจะใช้แนวคิดเวียนเกิด (recursive) ดังนั้นถ้า N = 0 ให้คืนค่า 1 ถ้าตัวเลข N < 10 ให้คืนค่า N มิฉะนั้นให้คืนค่า max(max_product(N/10) * (N mod 10), max_product((N/10) - 1)*9)
ตัวอย่างโค้ด C++
#include <iostream>
using namespace std;
int max_product(int N) {
if (N == 0)
return 1;
if (N < 10)
return N;
return max(max_product(N / 10) * (N % 10), max_product(N / 10 - 1) * 9);
}
int main() {
int N = 432;
cout << "Maximum product is: " << max_product(N);
}
ผลลัพธ์
Maximum product is: 243