#include <iostream>
using namespace std;

long long power(long long base, int exp){
    long long result = 1;
    for(int i=0; i<exp; i++){
        result *= base;
    }
    return result;
}
int main() {
    long long sum = 0;
    // write your code here......
    for(int j=1; j<11; j++){
        sum += (power(10, j)-1);
    }
    cout <<sum<< endl;
    return 0;
}

最核心的解法是把数列更换成10-1、100-1、1000-1....

可以转换成遍历求10的幂累加,出现一个问题就是int的最大值溢出了后续换long long解决

知识点小记:

一、问题根源:int类型的范围限制

C++ 中,普通int类型通常是4 个字节,取值范围是 -2147483648 ~ 2147483647(约 ±21 亿)。

而你的数列是:9、99、999、…、9999999999(10个9),其中最后一项9999999999本身就已经是10 位数(值为 9999999999),远超过int的最大值(2147483647);同时,这些数的和也会更大,int根本存不下,最终导致溢出(溢出后int会以 “负数” 形式显示)。

二、解决方法:改用更大的整数类型(long long

long long是 C++ 中更大的整数类型(通常 8 个字节),取值范围是 -9223372036854775808 ~ 9223372036854775807(约 ±92 亿亿),完全能容纳你的数列和。