题目:
编写思路:
初级想法:直接暴力加减(必然超时又超过long long int 的存储限制)
中级想法:找规律 把每一项AAA型的式子都放在数组中a[n][n]中 再用一个res[n+1]数组存放结果 利用模拟加法来解决 (当然要考虑进制) 博主已经试过雷了 最后一个测试点存储器爆了 中级想法代码留在文章末尾了
解决方案:优化中级想法 圈红的这一步显然多余 直接注释掉即可 提交一试 Accept !!
解决方案:
#include<stdio.h>
//int t[1000000][1000000]={0};
int main(){
//输入部分
int A,n;
scanf("%d %d",&A,&n);
/* 中级想法代码段 直接注释掉就可以了
//将每一项用数组存放起来
for(int i=0;i<n;++i)
for(int j=i;j<n;++j)
t[i][j]=A;
*/
//模拟加法及进制即可
int res[n+1]={0};
for(int i=n;i>=0;--i){
res[i]+=A*(i);
//如果需要进位那么 a[i-1]加上要进的数 a[i]对10取余保留
if(res[i]>9){
res[i-1]+=res[i]/10;
res[i]%=10;
}
}
//下面输出 首位是进制位 所以需要判断一下是否要从res[0]开始输出
int i;
if(res[0]==0&&res[1]!=0)
i=1;
else
i=0;
for(;i<n+1;++i)
printf("%d",res[i]);
return 0;
}
中级想法 未过的代码 :
//中级想法 爆了 最后一个样例没过
#include<stdio.h>
int t[1000000][1000000]={0};
int main(){
int A,n;
scanf("%d %d",&A,&n);
for(int i=0;i<n;++i)
for(int j=i;j<n;++j)
t[i][j]=A;
int res[n+1]={0};
for(int i=n;i>=0;--i){
res[i]+=A*(i);
if(res[i]>9){
res[i-1]+=res[i]/10;
res[i]%=10;
}
}
int i;
if(res[0]==0&&res[1]!=0)
i=1;
else
i=0;
for(;i<n+1;++i)
printf("%d",res[i]);
return 0;
}
初级小白(在校生)整理以用作学习,若有错误,还望指正,共勉!
初次书写,若存在侵权或其他问题,定立即改正,还望海涵。