题目大意:
输入一个n
,计算1+2+3+…+n。
输出的时候要跟一个空行。
代码:
用for暴力。
#include <cstdio>
int main() {
int sum,n;
while(~scanf("%d",&n)) {
sum = 0;
for(int i=0;i<=n;i++)
sum += i;
printf("%d\n\n",sum);
}
return 0;
}
公式版本(注意下,这里int n会wa)。应该是卡掉了除以2以前的那个数据。
#include<cstdio>
int main() {
long long n;
while(~scanf("%lld",&n))
printf("%lld\n\n",(n+1)*n/2);
return 0;
}
也有一些大佬是这样做的:
#include <cstdio>
int main() {
int sum,n;
while(~scanf("%d",&n)) {
sum = 0;
if(n%2==0)
sum = n/2*(n+1);
else sum = (n+1)/2*n;
printf("%d\n\n",sum);
}
return 0;
}
改一下,利用一下学到的位运算:
n&1 就是n数字与1进行与运算,如果最后一位是1就是奇数
n>>1 左移一位相当于除以二(乘二就是右移一位)
#include <cstdio>
int main() {
int n;
while(~scanf("%d",&n))
printf("%d\n\n",n&1 ? ((n+1)>>1)*n:(n>>1)*(n+1));
return 0;
}