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

Tổng đệ quy chữ số của số được lặp lại nhiều lần bằng C++

Cho số number và số lần lặp repeat. Tạo số mới bằng cách nối number lại repeat lần. Tính tổng đệ quy các chữ số (digital root) của số lớn này.

Ví dụ

Input: number=32, repeat=3 → 323232 → sum=15 → 1+5=6 Output: 6
Input: number=81, repeat=4 → 81818181 → sum=36 → 3+6=9 Output: 9

Quan sát quan trọng

Digital root của số lặp: dr(number lặp repeat lần) = dr(repeat * dr(number)). Vì tổng chữ số của số lặp = repeat * (tổng chữ số của number).

Mã nguồn C++

#include <bits/stdc++.h>
using namespace std;

int digitalRoot(int n) {
    if (n == 0) return 0;
    if (n % 9 == 0) return 9;
    return n % 9;
}

int recursiveSumRepeated(int number, int repeat) {
    int total = repeat * digitalRoot(number);
    return digitalRoot(total);
}

int main() {
    int number = 12, repeat = 4;
    cout << "Tổng đệ quy số lặp: " << recursiveSumRepeated(number, repeat);
    return 0;
}

Kết quả

Tổng đệ quy số lặp: 3

Giải thích

Tính digital root của number một lần. Nhân với repeat. Tính digital root của tích. Độ phức tạp O(1), không cần tạo số lớn hay chuyển chuỗi.

Kết luận

Bài viết giải quyết bài toán tổng đệ quy chữ số của số được lặp lại bằng công thức digital root. Mã C++ cực kỳ ngắn gọn, hiệu quả O(1). Có thể áp dụng cho C, Java, Python.