博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
杭电ACM 1001:Sum Problem
阅读量:2255 次
发布时间:2019-05-09

本文共 1318 字,大约阅读时间需要 4 分钟。

杭电刷题第二篇

原题回顾

Problem Description

In this problem, your task is to calculate SUM(n) = 1 + 2 + 3 + … + n.

Input

The input will consist of a series of integers n, one integer per line.

Output

For each case, output SUM(n) in one line, followed by a blank line. You may assume the result will be in the range of 32-bit signed integer

Sample Input

1

100

Sample Output

1

5050

注意题目的意思,该题目是求1~n的和,输入只要求输入n而已,别搞错了。

方法一:
直接使用一个for循环进行累加从1~n:

#include 
int main(){ int sum=0,n; while(scanf("%d",&n)!=EOF){ for(int i=1;i<=n;i++) { sum+=i; } printf("%d\n",sum); printf("\n"); sum=0; } return 0;}

方法二:

利用等差数列求和,在这里有一个容易出错的地方,因为题目要求“the result will be in the range of 32-bit signed integer”所以在使用等差数列公式时候如果先乘再除,会造成数据溢出的问题,所以要先除再乘。但是如果先除的话,注意区分当n是偶数和非偶数的情况,否则除运算不正确。所以正确的代码如下:

#include 
int main(){ int sum=0,n; while(scanf("%d",&n)!=EOF){ if(n%2==0) sum=n/2*(n+1); else sum=(n+1)/2*n; printf("%d\n\n",sum); sum=0; } return 0;}

错误代码如下:

#include 
int main(){ int sum=0,n; while(scanf("%d",&n)!=EOF){ sum=n*(n+1)/2; printf("%d\n\n",sum); sum=0; } return 0;}

还有一个经常错误的地方就是结果的输出“For each case, output SUM(n) in one line, followed by a blank line”,他的意思是输出结果后空一行。

转载地址:http://yxrdb.baihongyu.com/

你可能感兴趣的文章
Android最强技术实现:最强保活黑科技
查看>>
Android一行解决所有双击优化的问题
查看>>
你有几种实现方案Android 设备唯一标识?
查看>>
重磅来袭:Android Studio 3.6 发布啦,快来围观
查看>>
数据统计安卓面试重点分布:Java+自定义View+性能优化+NDK+Flutter
查看>>
水壶的问题—字节跳动Android岗面试题
查看>>
分享Android Studio中Gradle依赖
查看>>
void main(void) - the Wrong Thing
查看>>
这些分析加上这13道面试题,面试足矣
查看>>
面试官问我:如何加载100M的图片却不撑爆内存
查看>>
金三银四热潮下。Android高级工程师面试题整理
查看>>
【干货合辑】抢占2020新高地,抓住金三银四涨薪好时机。这些新热技术你值的拥有!
查看>>
Android进阶:一、日志打印和保存策略
查看>>
Android进阶:二、从源码角度看透 HandlerThread 和 IntentService 本质
查看>>
Android进阶:六、在子线程中直接使用 Toast 及其原理
查看>>
Android进阶:七、Retrofit2.0原理解析之最简流程【下】
查看>>
2019中级Android开发面试解答之线程篇
查看>>
Apache ZooKeeper官方网站下载
查看>>
MySQL事务的4种特性以及事务隔离级别
查看>>
javax.mail.AuthenticationFailedException: 535 Error: authentication failed解决办法
查看>>