1. 程式人生 > >noip2002 級數求和(模擬)

noip2002 級數求和(模擬)

問題描述   已知:Sn= 1+1/2+1/3+…+1/n。顯然對於任意一個整數K,當n足夠大的時候,Sn大於K。
  現給出一個整數 K,要求計算出一個最小的n;使得Sn>K。 輸入格式   一個整數,表示整數 k 輸出格式   一個整數,表示最小的n 樣例輸入 1 樣例輸出 2 資料規模和約定   1<=k<=15 解析:為了儘可能減小精度誤差,我把原式左右兩端同乘一個極大數x,如下:                (1+1/2+1/3+.....+1/n)>k           ==>(1/2+1/3+....1/n)*x>(k-1)*x           ==>(k-1)*x-(1/2+.....1/n)*x<0 程式碼:
#include<cstdio>

const double x=1e10;

int main()
{
  int i,k;
  scanf("%d",&k);
  double s=(k-1)*x;
  for(i=2;s>=0;s-=x/i,i++);
  printf("%d\n",i-1);  
  return 0;
}