@[20030103pz](/space/show?uid=20795) 记得发代码以后要加上格式,方法是在代码前后各加上3个下面的符号。(按键在TAB键的上方和主键盘数字1键的左方,在英文输入模式下敲击可以得到这个符号)
```
在这中间写代码
```
```
// 您的做法
# include <iostream>
using namespace std;
int main() {
int k,n=0;
cin>>k;
while (k>=0) {
n=n+1;
k=k-1/n;
}
cout<<n;
return 0;
}
//为什么tle了
```
做法不对。
- 首先,这里你的`k`是整数,而`1/n`是浮点数,因此,当你用`k=k-1/n`计算时,得到的一个浮点数会被**向0取整**,即如果你得到的数字是`1.333`会被舍弃整数变成`1`,`-1.2`会变成`-1`。请注意并不是向下取整(向下取整时,`-1.2`应该变成`-2`而不是`-1`,因为`-2<-1`是更靠下的)这导致你减到比0小一点但大于`-1`的时候k会被取整成为`0`,而这是满足你的循环条件`k>=0`的,于是程序陷入了死循环。
- 正确的修改方法见下:
```
# include <iostream>
using namespace std;
int main() {
int n=0;
double k;//k应该是浮点数
cin>>k;
while (k>=0){
n=n+1;
k=(k-1.0/n);
}
cout<<n;
return 0;
}
```
by sachzhou @ 2018-04-04 21:20:28
@[da32s1da](/space/show?uid=50092)
@[x義x](/space/show?uid=58567)
@[linzhihan](/space/show?uid=81841)
@[时间之矢](/space/show?uid=91315)
多谢,初三忙,没时间去补课,自学效果略差,多练应该会好一些的。
by 20030103pz @ 2018-04-06 08:38:27