PTA 基础编程题目集 7-38 数列求和-加强版

 题目:

编写思路:

初级想法:直接暴力加减(必然超时又超过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;
}

初级小白(在校生)整理以用作学习,若有错误,还望指正,共勉!

初次书写,若存在侵权或其他问题,定立即改正,还望海涵。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白学编程!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值