#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 亿亿),完全能容纳你的数列和。

京公网安备 11010502036488号