【发布时间】:2019-07-26 09:35:26
【问题描述】:
我试图计算 nth 个谐波数。这是我的程序的主要 sn-p:
#include<cstdio>
int main(){
int T; scanf("%d", &T);
for (int C = 1; C <= T; C++){
int n; scanf("%d", &n);
long double H = 1;
for (int i = 2; i <= n; i++)
H += (1.0/i);
printf("%.8lf\n", H);
}
return 0;
}
当我在我的机器上运行这个程序时(在 Code::Blocks IDE,编译器 gcc 5.1 中),一切似乎都很好。
输入:
10
1
2
3
4
5
6
7
8
9
10
输出:
1.000000
1.500000
1.833333
2.083333
2.283333
2.450000
2.592857
2.717857
2.828968
2.928968
但是当我在 online editor, it prints zero 中运行它时。这里,编译器是gcc 8.3。
我想知道这种现象背后的原因以及避免这种情况的方法,以便获得预期的输出。
【问题讨论】:
-
旁注:不要养成使用
*scanf()(“扫描格式化数据”)扫描潜在格式错误(用户)输入的习惯。读取一行输入,然后使用更强大的功能(例如strtod())对其进行解析,从而提供更强大的行为。如果你必须使用*scanf(),总是检查它的返回值以确保你确实确实将数据读入了你的变量。 -- 那是针对 C 的。对于 C++,您真的应该使用<iostream>而不是<cstdio>... -
已确认建议
标签: c++ floating-point stdout codeblocks