7-38 数列求和-加强版

7-38 数列求和-加强版

题目描述:

给定某数字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的值。

思路分析:

如果这道题按数学中的四则运算去直接计算结果,该数据会超出long long 的范围,甚至double,所以必须要按照单个单个去运算。其实该题可以化成乘法去运算,举个例子:当N=3时,A=1,a=1,可以依次输出Aa,A(a+1)…直到a=N为止。

程序代码:

#include<stdio.h>
#define N 200000
int main()
{
	int a,b,c,d[N],e;
	scanf("%d %d",&a,&b);
	c=b; //记录计算所需要的次数 
	for(e=1;e<=b;e++)
	{
		d[e]+=c*a;//将数字存入数组中。 
		if(d[e]>9)//进位,当d[e]大于9时,d[e+1]进位, 
		{
			d[e+1]+=d[e]/10;
			d[e]%=10; 
		}
		c--;
	}
	if(d[e]||!b)
	{
		printf("%d",d[e]);//当b为0或者后一位不为0时,就输出当前项 .
	}
	for(e=b;e>=1;e--)
	{
		printf("%d",d[e]);
	}
}
//原理分析,当a=1,b=3时,由第8行到17行计算,d[1]=3*1,d[2]=2*1,d[3]=1*1;将其依次输出,就是所要求的数列和。 当d[e]的数字大于9
//d[e+1]=d[e]/10,d[e]%=10. 

总结:

这道题第一次看的以为是简单的计算题,想利用pow函数在结合四则运算去写,但发现得到结果运行超时和答案错误,拿笔在纸上写几次运算时,就发现其中规律,结合数组依次输出每一位数就行。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值