数列求和-加强版
题目描述:
给定某数字A(1≤A≤9)以及非负整数N(0≤N≤100000),求数列之和S=A+AA+AAA+⋯+AA⋯A(N个A)。例如A=1, N=3时,S=1+11+111=123。
输入格式:
输入数字A与非负整数N。
输出格式:
输出其N项数列之和S的值。
输入样例:
1 3
输出样例:
123
思路:
因为所有相加的数每一位都是一样的,所以可以分几步实现:
将数组1~N的位置赋值为 A.
使用高精度加法的方法将数组对应每一位相加,并进位。
最后输出结果。
例如 A = 4 N = 3
4 + 44 + 444 = 492
a[1]=a[2]=a[3]=4
4 4 4
4 4
4
a[3]这个位置相当于3个A相加,a[2]相当于2个A相加再加上a[3]的进位,a[1]=A+进位
代码:
#include<stdio.h> //因为数字超过10000位,只能用数组的方式写
int main()
{
int a[100001];
int A,N,t=0; //定义t为需进位的数
scanf("%d %d",&A,&N);
for(int i=1;i<=N;i++)
a[i]=A; //将数组的前N为全部设为A,以便后续操作
for(int i=N;i>1;i--) //例A=4,N=3,则a[1]=a[2]=a[3]=4,a[3]这个位置相当于3个A
{ //相加,a[2]相当于2个A相加再加上a[3]的进位,a[1]=A+进位
a[i]=a[i]*i+t; //a[3]=4*3+0=12 a[2]=4*2+t(1)=9
t=a[i]/10; //t=12/10=1 t=9/10=0
a[i]%=10; //a[3]=12%10=2 a[2]=9%10=9
}
a[1]=A+t;
for(int i=1;i<=N;i++)
printf("%d",a[i]);
return 0;
}