数列求和-加强版

数列求和-加强版

题目描述:

给定某数字A(1≤A≤9)以及非负整数N(0≤N≤100000),求数列之和S=A+AA+AAA+⋯+AAANA)。例如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   //因为数字超过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;                 
}                                          

你可能感兴趣的:(C语言题目,算法,数据结构,c语言)