杭电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)是溢出了
#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); }}