首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

杭电ACM1001比较后不明白,求解释,多谢

2012-11-14 
杭电ACM1001比较后不明白,求解释,谢谢!/*#includeiostream#includefstreamusing namespace stdint ma

杭电ACM1001比较后不明白,求解释,谢谢!
/*#include<iostream>
#include<fstream>
using namespace std;
int main(){
//ifstream cin("input.txt"); 
  int n;
  while((cin>>n)!=NULL){
cout<<(int)(n*(n+1.0)/2.0)<<endl<<endl;
}
 
  return 0;
}*/
//上面没通过
#include <stdio.h>
int main(){
  int n, sum;
  while (scanf("%d", &n) == 1){
  sum = 0;
  while (n != 0){
  sum += n--;
  }
  printf("%d\n\n", sum);
  }
  return 0;
}
//这种本该超时的居然通过了

[解决办法]
浮点数强制转成整数,有可能会少1

不明白你为啥要把1.0和2.0写成浮点数,n*(n+1)必定是偶数这不需要证明吧?
[解决办法]
n*(n+1.0)/2.0这样先将整数n转换成浮点数,然后又强制转换为int,会导致某些数据位丢失。。。
[解决办法]
强制类型转换是有数字损失的
[解决办法]
不需要1.0,2.0,直接1,2就行,也不需要加(int)。n*(n+1)肯定是偶数,只要n不是0,除以2可以除尽
[解决办法]
第一、你第一种方法虽然不推荐,但是提交是能通过的
第二、n*(n+1)/2通不过是因为先算n*(n+1)是溢出了

C/C++ code
#include <stdio.h>int main(){    int n;    while(scanf("%d",&n)!=EOF)    {        if(n%2==0)            printf("%d\n\n",n/2*(n+1));        else            printf("%d\n\n",(n+1)/2*n);    }} 

热点排行