繁体   English   中英

如何计算两个负整数之间的总和C ++

[英]How do I calculate the sum in-between two negative integers c++

我创建了一个函数,该函数应该能够计算2个整数(正负)之间的加法,乘法和平方根。 但是,我的代码仅适用于正整数。

例如,如果我插入3和5,它将计算(3)+(4)+(5)= 12,但是如果我输入-3和-5,答案将为0。如果我输入5,也会发生相同的情况作为我的第一个整数,然后是3作为我的第二个整数,而不是第3个然后是5。我无法弄清楚我的代码出了什么问题。 我非常感谢您的指导并为我的问题提供帮助!

int calculate(int num1, int num2, char op) {
  int answer, x;

  if (op == 'a') {
    answer = 0;
    for (x = num1; x <= num2; x++) {
      answer += x;
    }
  }

  if (op == 'm') {
    answer = num1;
    for (x = num1 + 1; x <= num2; x++) {
      answer = answer * (x);
    }

    if (op == 's') {
      answer = 0;
      for (x = num1; x <= num2; x++) {
        answer = answer + (x * x);
      }
    }
  }
  return answer;
}

最简单的方法是在交换两个输入的函数的开头添加一行,以便较小的输入始终排在最前面:

#include <utility> // std::swap is in utility

int calculate(int num1, int num2, char op) { 
    if(num1 > num2) {
        std::swap(num1, num2); 
    }

    int answer = 0;

    if (op == 'a') {
        for (int x = num1; x <= num2; x++) {
            answer += x;
        }
    }

    if (op == 'm') { 
        answer = num1;
        for (int x = num1 + 1; x <= num2; x++) {
            answer = answer * x;
        }
    }

    if (op == 's') {
        for (int x = num1; x <= num2; x++){
            answer = answer + x*x;
        }
    }
    return answer;
}

根据两个给定整数的值,循环时可能必须向上或向下移动。 您需要根据num2-num1的符号来增加或减少,而不是增加。

更换

for (x = num1; x <= num2; x++)

for (x = num1; x <= num2; x+=sign(num2-num1))

哦,但是C或C ++中有sign()函数吗? 它应返回-1、0或+1,具体取决于其一个参数为<0、0或> 0。

请参阅: C / C ++中是否有标准的符号函数(signum,sgn)? https://helloacm.com/how-to-implement-the-sgn-function-in-c/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM