2017-09-16 103 views
1

我在輸入兩個數字a和b,然後計算b中可以有多少個b,然後用剩下的數量顯示這個數字。儘管當a = -2147483648和b = 10時,數學運算錯誤了,但即使使用調試器,我也可以發現問題所在。謝謝!C++中的數學問題

#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; 
} 

結果espected給出-214748365 2 結果214748363 -18

+3

_「...它算錯了......」_:你期望得到什麼結果,結果是什麼得到? –

+1

@ssovukluk OP正在使用'double'這可能是問題,但沒有預期/實際我們不能確定。 –

+0

對不起,我剛剛更新了答案 – polmonroig

回答

2

您正在從程序期待得到:(-16)/ 6 = -3次6和+ 2,但是,這是行不通的以這種方式在電腦操作員身上。它只是將16除以6,最後它減去所以我們得到-4。我對你的代碼做了一些修改以達到你的目的。我們必須制定一個計劃,以您想要的方式提供服務。因此,當你的倍數是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 
+0

您的回答給了我這個:-214748364 ,但我需要這個:-214748365,第二個輸出是不同的,這取決於我選擇的答案。我找不到這個問題,這很奇怪。 – polmonroig

+0

即將回家。在30分鐘之後,我會幫你改寫代碼以達到教育目的。 – ssovukluk

+0

@polmonroig我按照你想要的方式編輯。 – ssovukluk

1
#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; 

所有病例coverd來計算有多少b可以在a裏面,你可以嘗試使用%運算符,這會更好

+0

我試過你的代碼,但是當它是否定的,它給了我總是0m這是我不想要的東西, b在這種情況下更大,但絕對值不是,因此你的答案是正確的,但它不是我正在尋找的東西,無論如何非常感謝你! – polmonroig

+0

當a爲負數時,b在這種情況下會更大,如您所說如果您想根據絕對值進行計算,您可以在if條件之前添加此行 ; a = abs(a); b = abs(b); –

+0

是的你是對的,但我需要增加一個更多:例如a = -32 b = 6;結果將會是-6,因爲6 * 5 = 30 + 6 – polmonroig