0

我想解决这个问题,因为我比任何其他语言都更了解 JavaScript,所以我首先用 JavaScript 编写它,现在我正试图将它翻译成 C。

示例图像

这是我的 JavaScript 代码

var SUM=0,RES=1,n=prompt('Enter n'),i=1,j=1;
for(var i=1;i<=n;i++){

  SUM = 0;

  for(var j=1;j<=i;j++){

    SUM = SUM+ i/(2*j);

  }
  RES = RES * SUM
}
console.log(RES)

认为这运作良好。我把它翻译成C,结果是:

#include "stdio.h"

int main(void) 
{
   int n,i,j;
   float SUM=0,RES=1;
   printf("n equals to ");
   scanf("%d", &n); 

    for(i=1;i<=n;i++){
        SUM = 0;

        for(j=1;j<=i;j++){

            SUM = SUM + i/(2*j);

        }
        RES = RES * SUM;
    }
   return RES;
}

JavaScript 至少返回一个数字。C代码总是返回0。问题出在哪里?

4

2 回答 2

3

被整数除法所欺骗(一个非常常见的问题)!如果您将一行更改为:

SUM = SUM + (float)i/(2*j);

原因是整数除法的结果是另一个整数。所以每当

i/2*j < 1 (for positive integers)

你的结果被截断为0。在你的情况下,不平等总是正确的,所以你只是加了很多零。只需先将 i 转换为浮点数,然后除以得到双倍结果。

于 2013-10-27T13:35:59.660 回答
2

如评论中所述,您正在此行中进行整数除法

 SUM = SUM + i/(2*j);

这将返回一个整数的结果(如使用 floor 函数)

您需要将 1/(2*j) 中的隐式变量转换为浮点数或双精度数。

整数/浮点数是浮点数,整数/整数将返回整数。

浮点数乘以整数是浮点数。

SUM = SUM + i/(2.0f*j); 

应该通过将分母转换为浮点数来解决您的问题,

于 2013-10-27T13:37:38.217 回答