题目的主要信息:

  • 有数列为:9,99,999,...,9999999999(10个9)
  • 求这个数列的和

具体做法:

该数列第一个数为a1=9a_1=9,后续递推公式为ai=ai110+9a_i=a_{i-1} * 10 + 9,其中1<i<111<i<11

有了递推公式,我们可以从9开始,循环10次,每次累加结果,并根据累加公式求出下一个元素的值。

为了防止累加和越界,我们最好使用long long。 alt

#include <iostream>
using namespace std;

int main() {
    long long output = 0;
    long long base = 9; //以9为基数
    for(int i = 0; i < 10; i++){ //一共十个数字
        output += base; //累加数列
        base = base * 10 + 9; //当前数列乘10加9就是下一个数列
    }
    cout << output << endl;
	return 0;
}

复杂度分析:

  • 时间复杂度:O(1)O(1),10次循环,常数级别
  • 空间复杂度:O(1)O(1),无额外空间