簡體   English   中英

C ++中的數學問題

[英]Math issue in C++

我正在制作一個代碼,你在其中輸入兩個數字a和b,然后它計算a里面有多少個b,然后它會顯示這個數字和剩下的數量。 雖然當a = -2147483648且b = 10時數學錯誤,我可以找出問題所在,即使使用調試器。謝謝!

#include <iostream>
#include <cmath>
int main() {
    int multiple, a, b, rest;
    std::cin >> a >> b;
    if (a > 0)
    {
        multiple = floor(a / b);
        rest = a - (multiple * b);
    }
    else
    {
        multiple = floor((a - b) / b);
        rest = (multiple*b - a);
    }

    std::cout << multiple << " " << rest << std::endl;
}

結果預計-214748365 2結果給出214748363 -18

你期望從程序中給出:( - 16)/ 6 = -3乘以6和+ 2.但它在計算機操作員上不能以這種方式工作。 它只是將16除以6,最后它減去所以我們得到-4。 我對您的代碼進行了一些更改,以便為您的目的服務。 我們必須按照你想要的方式制作一個程序。 因此,當a <0時,你的乘法器是負數,我們需要向它添加(-1)。 所以6 *(乘數-1)+ 2 == 6 *( - 2-1)+2 == -16所以:

#include <iostream>
using namespace std;

int main()
{
    int multiple, a, b, rest;
    std::cin >> a >> b;
    if (a > 0)
    {
        multiple = a / b;
        rest = a - (multiple * b);
    }
    else
    {
        multiple = a / b - 1;
        rest = -(multiple*b - a);
    }

    std::cout << multiple << " " << rest << std::endl;

    return 0;
}

跑:

./a.out 
-2147483648
10
-214748365 2
#include <iostream>
#include <cmath>
main (){
 double multiple, a, b, rest;
 std::cin >> a >> b;
 // you have to make sure b not equal zero 
 if (b != 0){
    // when a is bigger then many b's can be inside a 
    if (a > b){
       multiple = floor (a / b);
       rest = a - (multiple * b);
    }
    // when b is bigger then no b's can be inside a 
    else if (a < b){
             multiple = 0;
             rest = a;
    }
    // when a = b  then it only one b can be inside a 
    else{
          multiple = 1;
          rest = 0;
    }
  }
 std::cout << multiple << " " << rest << std::endl;

它的所有案例都涵蓋了計算內部的b數量,你可以嘗試%運算符它會更好

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM