Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Max của tổng và tích chữ số lặp lại cho đến khi còn 1 chữ số trong C++


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