#include <iostream>
using namespace std;
int main() {
int A, N;
cin>>A>>N;
if(N==0)//0个A,则和S为0
{
cout<<0;
return 0;
}
int *val=new int[N+1];//最后的和S可能有N位或者N+1位
int tmp=0;
//N个单项数据中如A,AA,AAA,AAA~,个位数为A的
//有N个,十位数为A的有N-1个,依次类推
for(int i=N;i>=1;i--)
{
tmp+=A*i;
val[i]=tmp%10;
tmp=tmp/10;
}
if(tmp!=0)
cout<<tmp;
for(int i=1;i<=N;i++)
cout<<val[i];
delete [] val;
return 0;
}
注意:
- 本题涉及到有N个A数列求和,当A个数为10000时,如A+AA+AAA+AAAA·········+AAAAAAAAAAA(N个A)任何数据类型无法存储,常规计算方法不可行
- 可行方法:用长度为N+1的整形数组存储结果,每个数组位存储一个位数据在N个数据项A+AA+AAA+AAAA·········+AAAAAAAAAAA
- 有N个数据项个位数为A,N*A=tmp为所有数据项个位数的和,tmp%10即为和S的个位数,将其存入数组
- 有N-1个数据项的十位数为A, tmp+=(N-1)*A为所有十位数的和,tmp%10即为和S的十位数,将其存入数组
6690

被折叠的 条评论
为什么被折叠?



