Cho số nguyên N. Nhiệm vụ: tính tổng dãy 1 + 22 + 333 + 4444 + ... đến n số hạng.
Ví dụ minh họa
Input: N = 4 Output: 4800
1 + 22 + 333 + 4444 = 4800
Phương pháp giải
Số hạng thứ i là i lặp i lần = i × (10ⁱ - 1)/9. Tổng = 1/9 Σ[i×10ⁱ - i] = 1/9[Σ(i×10ⁱ) - n(n+1)/2]. Σ(i×10ⁱ) = [n×10ⁿ⁺² - (n+1)×10ⁿ⁺¹ + 10]/81. Công thức cuối: Sum = [10ⁿ⁺¹(18n-2) - 81n² - 81n + 20] / 1458
Ví dụ chương trình
#include <iostream>
#include <cmath>
using namespace std;
long long calcSumNTerms(int n) {
return ((18LL * n - 2) * (long long)pow(10, n + 1) - 81LL * n * n - 81LL * n + 20) / 1458;
}
int main() {
int n = 5;
cout << "Tổng dãy đến " << n << " số hạng: " << calcSumNTerms(n);
return 0;
}
Kết quả
Tổng dãy đến 5 số hạng: 60355