给定某数字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
这道题可以用类似于大数运算产生进位的方法来实现(如果直接用int加法直接来解决这个问题会有部分测试点通不过)
思路详解:假设a=4,n=4
4
4 4
4 4 4
4 4 4 4
其实就相当于上面四行相加,把每一列相加记为一轮,每一轮相加产生的数的个位数即为这个位置的结果数,其它的则进位参与下一轮的计算。
这种方法其实就是我们平时计算的方法。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a,n,p,mid;//mid记录每一轮的结果
int jin=0;//用于保存进位
cin>>a>>n;
int T[n+1];//定义为n+1,避免最后一轮相加大于十产生进位
p=n;//用于实时记录每一轮需要相加的a的个数
if(n==0)
printf("0");
for(int i=0;i<=n;i++)
{
mid=p*a+jin;
T[i]=mid%10;
jin=mid/10;
p--;
}
if(T[n]==0)//如果最后一轮没有产生进位,即T[n]没有用到的时候的输出
{
for(int i=n-1;i>=0;i--)//利用倒序输出
cout<<T[i];
}
else if(T[n]!=0)//如果最后一轮产生进位的时候的输出
{
for(int i=n;i>=0;i--)
cout<<T[i];
}
return 0;
}