蓝桥杯C/C++题目

dddd~ 2020-01-15 07:54:47
请教大佬们,这个题目
问题描述
求1+2+3+...+n的值。
输入格式
输入包括一个整数n。
输出格式
输出一行,包括一个整数,表示1+2+3+...+n的值。
样例输入
4
样例输出
10
样例输入
100
说明:有一些试题会给出多组样例输入输出以帮助你更好的做题。

一般在提交之前所有这些样例都需要测试通过才行,但这不代表这几组样例数据都正确了你的程序就是完全正确的,潜在的错误可能仍然导致你的得分较低。

样例输出
5050
数据规模与约定
1 <= n <= 1,000,000,000。
说明:请注意这里的数据规模。

本题直接的想法是直接使用一个循环来累加,然而,当数据规模很大时,这种“暴力”的方法往往会导致超时。此时你需要想想其他方法。你可以试一试,如果使用1000000000作为你的程序的输入,你的程序是不是能在规定的上面规定的时限内运行出来。

本题另一个要值得注意的地方是答案的大小不在你的语言默认的整型(int)范围内,如果使用整型来保存结果,会导致结果错误。

如果你使用C++或C语言而且准备使用printf输出结果,则你的格式字符串应该写成%I64d以输出long long类型的整数。


这是我的代码,为什么用Visual C++编译出结果不对,用蓝桥杯测试系统显示运行超时,其他正确?
#include <stdio.h>

int main()
{

long long x,f=0,i;

scanf("%ld",&x);
for(i=1;i<=x;i++)
f=f+i;
printf("%I64d\n",f);
return 0;
}
...全文
683 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
秋刀鱼已过期 2020-02-29
  • 打赏
  • 举报
回复
用long long试一下,不行的话再试试其他
一只程 序 猿 2020-02-03
  • 打赏
  • 举报
回复
#include<bits/stdc++.h> using namespace std; int main(){ int a; cin>>a; cout<<(a+1)*a/2<<endl; }
「已注销」 2020-01-27
  • 打赏
  • 举报
回复
对了,是long不够,long long勉强,unsigned long long是够了
「已注销」 2020-01-27
  • 打赏
  • 举报
回复
引用 18 楼 重工黑大帅 的回复:
快一年多没写c了,大致原理是这样的
迭代都超时,递归绝对超时,而且int类型长度不够,最好直接用公式计算
bkLion 2020-01-27
  • 打赏
  • 举报
回复
快一年多没写c了,大致原理是这样的
bkLion 2020-01-27
  • 打赏
  • 举报
回复
include "stdio.h" void main(){ long m=0; scanf("%d",&m); long n=sum(m); printf("所求和为:%d\n",m) } int sum(long n) { if(n==0) { return 0; }else { return sum(n-1)+n; } }
bkLion 2020-01-27
  • 打赏
  • 举报
回复
还可以用递归的方法,我经常用,哈哈哈,给你写个例子
卡多希_ 2020-01-26
  • 打赏
  • 举报
回复
可以用等差数列求和的方法
  • 打赏
  • 举报
回复
这题目考的是梯形面积为上底加下底乘以高除以二。

#include<stdio.h>
int main()
{
unsigned long long n = 0,s=0;
printf("enter n=?\n");
scanf("%I64u",&n);
printf("s=%I64u",(1+n)*n/2);
return 0;
}
/*
enter n=?
1000000000
s=500000000500000000
*/


小透明~ 2020-01-21
  • 打赏
  • 举报
回复
#include<stdio.h> int main() {int i,n,s=0; printf("enter n=?\n"); scanf("%d",&n); for(i=1;i<=n;i++) s+=i; printf("s=%d",s); return 0; }
一星伴月 2020-01-19
  • 打赏
  • 举报
回复
直接写的话肯定会超时,你知道1加到50那个故事吧,他不是一个一个加起来的,而是首尾加乘个数的一半,这样就不会超了呗
「已注销」 2020-01-16
  • 打赏
  • 举报
回复
你拿dev C++试试,不行的话vs肯定支持,最新版本的mingw就gcc肯定是支持的,这多半编译器版本问题,改printf那是在改库函数,还是省省吧,还不如自己写个输出函数
dddd~ 2020-01-16
  • 打赏
  • 举报
回复
printf怎么修改呀,long long非法,可是在蓝桥杯测评系统中是正确的
  • 打赏
  • 举报
回复
printf("%ull", result);这里的ull应该用llu或者lld,ull只适用于数字字面值后缀
dddd~ 2020-01-16
  • 打赏
  • 举报
回复
谢谢啦
寻开心 2020-01-16
  • 打赏
  • 举报
回复
printf("%I64d\n",f); 前面自己的测试代码里面不是有吗?
寻开心 2020-01-15
  • 打赏
  • 举报
回复
int main()
{

long long x,f=0,i;

scanf("%ld",&x);
f = n*(1+n)/2;
printf("%I64d\n",f);
return 0;
}

用不用unsigned 无所谓的。 long 后面 跟long非法,是你的printf函数给出的吧。
「已注销」 2020-01-15
  • 打赏
  • 举报
回复
Visual C++太老了~~~,可能并不支持开long long,一般ll肯定没问题,你看我这ull
dddd~ 2020-01-15
  • 打赏
  • 举报
回复
编译时,出现错误 error C2632: 'long' followed by 'long' is illegal
「已注销」 2020-01-15
  • 打赏
  • 举报
回复
还是用楼上大佬的公式吧,暴力太慢了,而且我看着这答案不太对劲
加载更多回复(2)

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧