)
摘要本文介绍一道经典数列求和题目给定数字 A1≤A≤9和非负整数 N0≤N≤100000计算 S A AA AAA ⋯ AA⋯AN 个 A。由于 N 可达 10 万结果可能极大普通整型无法存储。代码采用 C 语言实现通过数组模拟大整数竖式加法逐位计算并处理进位高效求解该数列之和。题目描述给定某数字A1≤A≤9以及非负整数N0≤N≤100000求数列之和SAAAAAA⋯AA⋯AN个A。例如 A1, N3 时S111111123。输入格式输入数字 A 与非负整数 N。输出格式输出其 N 项数列之和 S 的值。输入样例1 3输出样例123代码部分实现#includestdio.h// 引入标准输入输出头文件intmain(){inta,n;// a 为数字 (1-9)n 为项数scanf(%d %d,a,n);// 读取数字和项数if(n0){// 如果项数为 0printf(0\n);// 和为 0return0;// 程序结束}intresult[100001]{0};// 结果数组存储大整数每一位初始化为 0intcarry0;// 进位变量初始为 0for(intin;i1;i--){// 从高位到低位模拟竖式加法intsumi*acarry;// 第i位的和i个a相加 前一步进位result[i]sum%10;// 保存当前位的数字取个位carrysum/10;// 计算新的进位整除10}if(carry0){// 如果最高位有进位result[0]carry;// 进位存入result[0]for(inti0;in;i){// 从result[0]开始输出所有位printf(%d,result[i]);// 输出每一位数字}}else{// 最高位无进位for(inti1;in;i){// 从result[1]开始输出printf(%d,result[i]);// 输出每一位数字}}printf(\n);// 输出换行符return0;// 程序正常结束}算法流程图是否否是是否输入 A 和 NN 0?输出 0结束初始化 result 数组长度为 N1初始化 carry 0for i N 到 1sum i * A carryresult[i] sum % 10carry sum / 10i 1?carry 0?result[0] carry从 0 到 N 输出 result从 1 到 N 输出 result