qq_45128461
采纳率50%
2019-12-10 01:32

【不懂就问】Java 求多项式A(1/1+1/3+1/5+1/7+...)前1000项。 为什么按照我的代码,结果为1?

  • java
已采纳

Java 求多项式A(1/1+1/3+1/5+1/7+...)前1000项。

为什么按照我的代码,结果为1?

附上代码:

public class Data20191205 {
    static double num,sum=0;
    public static void main(String []args) {
        for(int i=1;i<=1000;i++) {
            num = 1/(2*i-1);
            sum = sum + num;
        }
        System.out.println(sum);
    }
}

图片说明

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

6条回答

  • qq_43328440 无名之备 2年前

    问题出在这一句:num = 1/(2*i-1);

    等号后面全是int类型,计算之后赋值给num时才会自动类型转换为double。
    当i>1时,计算结果小于1大于0,在int类型下会舍弃小数位,结果是0.
    所以赋值给num的也是0.

    点赞 1 评论 复制链接分享
  • qq_40893012 不喜欢喝茶的猫 2年前
     num = 1/(2*i-1);
    

    这里前后类型不一样
    改为:

     num = (double)1/(2*i-1);
    
    点赞 1 评论 复制链接分享
  • lwbudawuzhunbei lwbudawuzhunbei 2年前

    你的 i 的数据类型设置错了,应该把 int 改为 double或者 float

    点赞 评论 复制链接分享
  • utempdclhn2 utempdclhn2 2年前

    for(double i=1;i<=1000;i++) {
    num = 1/(2*i-1);
    sum = sum + num;
    }

    for(int i=1;i<=1000;i++) {
    num =1/Convert.ToDouble((2*i-1));
    sum = sum + num;
    }

    for(int i=1;i<=1000;i++) {
    num =1.0/(2*i-1);
    sum = sum + num;
    }

    这样都可以, 两个int参与计算的结果会是int型的 ,
    使其中一个数变成double类型计算结果就是正确的

    点赞 评论 复制链接分享
  • weixin_44061767 渣渣学长 2年前

    就是类型不匹配,第一次为1的时候

    点赞 评论 复制链接分享
  • u010597819 会灰翔的灰机 2年前

    类型不对

    for(int i=1;i<=1000;i++) {
        num = 1.0/(2*i-1);
        sum = sum + num;
    }
    
    点赞 评论 复制链接分享

相关推荐