簡體   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