p转c++,求教

P1035 [NOIP2002 普及组] 级数求和

@[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


上一页 |