数列求和-加强版

数列求和-加强版

题目描述:

给定某数字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<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;                 
}                                          
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值