问题标题: 酷町堂:2750 求和

0
0
已解决
李玥仑
李玥仑
中级光能
中级光能

题目描述 Description

最近合肥下了好多天雨,周末班主任组织班级同学们去欢乐谷游玩,大家都很开心,同学们玩了好多东西,大家都很疲劳了,在这个时候,小明和同学们看到了一个开启智慧之门游戏。小明和同学决定去看看究竟。欢迎同学来到智慧之门,来这里得同学需要一定得智慧,才能参观游玩,智慧之门门主提出了一个问题,只有回答出来得同学才能参观游玩下一个节目,智慧之门门主首先提出了一个数学问题给你一个正整数10,求1到10之间所有的5的倍数之和。小明快速得到答案15,这时候智慧之门门主说,如果给你任意一个正整数是N(N≤10^10),求1到N之间所有的5的倍数之和,这个时候大家都在思考中,小明得意的笑了,因为他是信息学爱好者,可以编程实现。

输入描述 Input Description

输入只有一行,正整数N

输出描述 Output Description

输出只有一行,1到N之间所有的5的倍数之和S

样例输入 Sample Input

10

样例输出 Sample Output

15(因为1~10之间只有5和10是5的倍数)

献上我的五彩斑斓代码

int n,sum=0;

cin>>n;

for(int i;i<=n;i++){

    if(i%5==0){

        sum+=i;

    }

}

cout<<sum;

(5个测试点对,2个测试点错,3个测试点超时)

 


0
已采纳
褚俊皓
褚俊皓
新手天翼
新手天翼
for(int i=0;i<=n;i+=5){
        sum=sum+i;
    }

sum定义成long long

AC愉快

0
董妙一
董妙一
资深守护
资深守护

循环体里i=1;i<=n;i+=5;   然后累加起来,输出就行了

0
被禁言 高乐彤
高乐彤
修练者
修练者

不要用if,把起点变成i=0,然后i+=5,之后你直接加进去就行。

否则这对系统的计算量很大,然后超时。

0
江子周
江子周
中级守护
中级守护

还有,建议这道题不用枚举,用数学方法(N<=10^10,枚举会TLE)

首先找到0

再找到<=n的最大的%5=0的数

求出项数:(末尾一项-0)/5+1

等差数列求和:(首项+末项)*项数/2

 

结束~

(这竟然还是1分题……)

0
李玥仑
李玥仑
中级光能
中级光能
for(int i=0;i<=n;i+=5){
        s+=i;
    }

50分

我要回答