话不多说,直接上代码
#include<stdio.h>
int main()
{
int n;
double sum = 0;
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
sum += 1 / (2 * i - 1);
}
printf("%.2lf", sum);
return 0;
}
在这段代码中,无论你n的输入为多少,输出永远是1.00,这是为什么呢
众所周知,int类型的数在进行除法时会有数值损失
如10/3=3;而不是等于3.333…而double类型的数就可以保留小数部分,不会造成数值损失
sum += 1 / (2 * i - 1);
在这段代码中,1是int类型,(2 * i – 1)也是一个int类型,所以在进行除法运算时,小数部分永远会丢失,输出的结果永远是1.00
解决方法很简单,就是把1改成1.0
sum += 1.0 / (2 * i - 1);
1.0是一个浮点数,浮点/整数=浮点,不会造成数值损失啦
以此篇文章致敬我回答了n次的问题
THE END
暂无评论内容