c - C 中的算术级数的结果不正确

标签 c math integer-division arithmetic-expressions

我正在尝试将数字 (x0) 的倍数与级数 (r) 和次数 (n) 相加。如果我使用数字 x0 = 6, r = 3, n = 3,结果应该是 6+9+12=27,但程序总是给我18。

我尝试不同时间更改公式,但如果我在纸上这样做,结果是正确的,所以我担心问题可能是语法......

所以程序在C:

#include <stdio.h>

int sum_progression(int x0, int r, int n)
{
  return (n/2) * ((2 * x0) + ((n - 1) * (r)));
}

void test_sum_progression(void)
{
  int x0;
  int r;
  int n;
  scanf("%d", &x0);
  scanf("%d", &r);
  scanf("%d", &n);
  int z = sum_progression(x0,r,n);
  printf("%d\n", z);
}

int main(void)
{
  test_sum_progression();
  return 0;
}

感谢您的帮助!

最佳答案

当使用带有除法的整数时,会计算该值,然后将其截断为整数。
如果你将 int 除以 int 你应该这样做:
返回 (n/(double)2) * ((2 * x0) + ((n - 1) * (r)));

关于c - C 中的算术级数的结果不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26089454/

相关文章:

c - 多线程、消费者和生产者

C语言,如何将数字转换为字符串?

C - 动态地将 void 指针转换为结构

c - 帮助我理解这个函数标题。代码来自 FreeBSD 8 源代码 UFS 部分

ios - 用于在多个单位之间转换值的动态数学

assembly - 没有 32 位寄存器的 32 位/16 位有符号整数除法?

C: 以 10 为基数打印一个 BigInteger

assembly - ASM 8086 没有分区的分区

java - 在圆圈内弹跳球

css - 重新旋转的元素中的属性背后的计算是什么?