给定某数字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
由于N最大可以去100000,超出long long int的范围,故应使用大整数相加的思路,使用数组保存结果,每一位对应相加的时候要考虑进位,该题较为简单,结果位数为N或N+1,故输出的时候可以根据ans[N+1]是否为0,判断是否输出。
#include<iostream>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
using namespace std;
const int maxn=10000000;
int ans[maxn];
int cnt;
void compute(int A,int N)
{
cnt=0;
memset(ans,0,sizeof(ans));
for(int i=N;i>=1;i--)
{
ans[cnt]+=A*i;
if(ans[cnt]>=10)
{
ans[cnt+1]+=ans[cnt]/10;
ans[cnt]=ans[cnt]%10;
}
cnt++;
}
if(ans[N-1]>=10)
{
ans[N]+=ans[N-1]/10;
ans[N-1]=ans[N-1]%10;
}
}
int main()
{
int A,N;
while(scanf("%d%d",&A,&N)!=EOF)
{
compute(A,N);
if(N==0)
{
printf("0\n");
continue;
}
for(int i=N;i>=0;i--)
{
if(i==N&&ans[i]==0)
continue;
printf("%d",ans[i]);
}
printf("\n");
}
return 0;
}