级数求和 HELP ME 一道题 我很郁闷
问题描述
已知: Sn= 1 + 1 / 2 + 1 / 3 +…+ 1 / n 。显然对于任意一个整数 K ,当 n 足够大的时候, Sn 大于 K 。
现给出一个整数 K ( 1 <=k <=15 ),要求计算出一个最小的 n ;使得 Sn > K 。
【输入格式】
输入文件只有一行:即一个自然数k(1≤k≤15)。
【输出格式】
输出文件也只有一行:即所求的最小的n。
【输入输出样例】
输入文件名: sum.in
1
输出文件名: sum.out
2
我的代码是:
#include "stdio.h "
int main()
{
int n=1,k;
int sn=0;
FILE *openPtr;
FILE *writePtr;
openPtr=fopen( "sum.in ", "r ");
fscanf(openPtr, "%d ",&k);
while(sn <=k){
sn+=(1/n);
n++;
}
writePtr=fopen( "sum.out ", "w ");
fprintf(writePtr, "%d ",n);
fclose(openPtr);
fclose(writePtr);
return 0;
}
哪里出错了啊?
[解决办法]
注意你下面的代码:
while(sn <=k){
sn+=(1/n);
n++;
}
这里n是整数,所以1/n按整数除法,得0,所以是死循环.
把n改成double类型就可以了.