源本科技 | 码上会

数列求和问题

2026/01/26
20
0

题目

s=a+aa+aaa+aaaa++aaana s = a + aa + aaa + aaaa + \cdots + \underbrace{aa\ldots a}_{n\text{ 个}a} 的值,其中a a 是一个数字(0~9 之间的整数)。例如:当a=2,n=5 a = 2, n = 5 时,计算
s=2+22+222+2222+22222s = 2 + 22 + 222 + 2222 + 22222
相加的项数n n 由用户通过键盘输入控制


说明

这个问题的核心在于如何构造每一项。观察数列:

  • 第 1 项:aa

  • 第 2 项:10a+a=11a10a + a = 11a

  • 第 3 项:100a+10a+a=111a100a + 10a + a = 111a

  • ...

  • i i 项:由i i 个数字a a 拼接而成,其数值为:ti=a×1111i1t_i = a \times \underbrace{111\ldots1}_{i\text{ 个}1}

运行示例

请输入a的值
2
请输入n个数
5
24690

解释:2+22+222+2222+22222=246902 + 22 + 222 + 2222 + 22222 = 24690

再例如:

请输入a的值
3
请输入n个数
4
3702

因为:3+33+333+3333=37023 + 33 + 333 + 3333 = 3702

👈点击左箭头查看答案(一定要在自己思考并实现后再看参考答案哦!)

规律分析

设第i i 项为Ti T_i ,则:

T1=aT2=10a+a=a(10+1)T3=100a+10a+a=a(100+10+1)=a×111Ti=a×10i19\begin{matrix} T_1 = a \\ T_2 = 10a + a = a(10 + 1) \\ T_3 = 100a + 10a + a = a(100 + 10 + 1) = a \times 111 \\ \vdots \\ T_i = a \times \frac{10^i - 1}{9} \end{matrix}

因此总和为:s=ai=1n10i19=a9(i=1n10in)=a9(10(10n1)9n)s = a \sum_{i=1}^{n} \frac{10^i - 1}{9} = \frac{a}{9} \left(\sum_{i=1}^{n} 10^i - n \right)= \frac{a}{9} \left(\frac{10(10^n - 1)}{9} - n \right)


程序实现

import java.util.Scanner;

public class Demo08 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.println("请输入a的值");
        int a = in.nextInt();
        System.out.println("请输入n个数");
        int n = in.nextInt();

        long s = 0;      // 使用 long 防止溢出
        long current = 0; // 当前项

        for (int i = 1; i <= n; i++) {
            current = current * 10 + a; // 构造 aa...a(i 个 a)
            s += current;
        }

        System.out.println(s);
        in.close();
    }
}

说明:

  • 不修改原始 a,而是用 current 动态构建每一项。

  • 使用 long 类型可支持更大的n n (如n=10 n=10 时,最后一项有 10 位,int 会溢出)。

  • 逻辑清晰,符合题意。


补充知识

该问题属于数字模式构造类编程题,常见于初学者练习循环与字符串 / 数值转换。虽然形式简单,但能有效训练对“数位构造”和“累加逻辑”的理解