題目鏈接:http://wikioi.cn/problem/210799
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
unsigned long long n;
double k=0.0;
cin>>n;
for(unsigned long long i=1;i<=n;i++){
unsigned long long v=1;
for(unsigned long long j=1;j<=i;j++){
v*=j;
}
k+=1.0/v;
}
printf("%.10f\n",k);
return 0;
}
這道題我到底哪里做錯了?
求指點!
我在自己編譯器上寫10,都出結果2.7182787698,寫15,出現2.7182818288,寫2,出現1.5000000000,都沒錯
為什么這道題一個測驗點也沒對?
uj5u.com熱心網友回復:
樓主你把你的k的初值設為1.0uj5u.com熱心網友回復:
另外,unsigned long long 沒必要吧。。全改為int就行了,雖然不影響結果,但是這題沒要求要這么大的整型型別。你怕v的整型值不夠大,就將v的型別改成double就行了。具體你可以看這個代碼
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int n;
double k = 1.0;
cin >> n;
for (int i = 1; i <= n; i++) {
double v = 1.0;
for (int j = 1; j <= i; j++) {
v *= j;
}
k += 1.0 / v;
}
printf("%.10f\n", k);
return 0;
}
uj5u.com熱心網友回復:
錯就錯在, 當輸入2的時候,1 + 1/1! + 1/2! = 2.5 而不是 1.5
uj5u.com熱心網友回復:
根據你的代碼運行結果如下:
1
1.0000000000
2
1.5000000000
3
1.6666666667
4
1.7083333333
5
1.7166666667
6
1.7180555556
7
1.7182539683
8
1.7182787698
9
1.7182815256
10
1.7182818011
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/72823.html
標籤:C++ 語言
