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函数在结合四则运算去写,但发现得到结果运行超时和答案错误,拿笔在纸上写几次运算时,就发现其中规律,结合数组依次输出每一位数就行。