Cho số N. Lặp lại: tính tổng chữ số hoặc tích chữ số cho đến khi ra 1 chữ số. Trả về max của 2 kết quả.
Thuật toán
- Tổng chữ số lặp lại = digital root: nếu N%9==0 thì 9, else N%9 (trừ N=0).
- Tích chữ số lặp lại: nhân các chữ số, nếu kết quả >9 thì tiếp tục nhân chữ số của kết quả.
- Trả về max(2 giá trị).
Ví dụ triển khai (C++)
#include <bits/stdc++.h>
using namespace std;
long repeatedSum(long n) {
if (n == 0) return 0;
return (n % 9 == 0) ? 9 : (n % 9);
}
long repeatedProduct(long n) {
long prod = 1;
while (n > 0 || prod > 9) {
if (n == 0) { n = prod; prod = 1; }
prod *= n % 10;
n /= 10;
}
return prod;
}
long maxSumProduct(long N) {
if (N < 10) return N;
return max(repeatedSum(N), repeatedProduct(N));
}
int main() {
long n = 631;
cout << maxSumProduct(n) << endl;
return 0;
}
Đầu ra
8