2012-04-12 66 views
3

我已經用C++編寫了一個小程序,提示用戶輸入,用戶給出一個數字,然後計算機顯示相反的數字。打印由用戶給出的反向數字的算法?

例如:17變爲71 123 321變得

這是程序:

#include <iostream> 
#include <string> //for later use. 
using namespace std; 

int rev(int x) 
{ 
    int r = 0; 
    while(x) 
    { 
     r = (r*10) + (x%10); 
     x = x/10; 
    } 
    return r; 
} 

int main() 
{ 
    int nr; 
    cout << "Give a number: "; 
    cin >> nr; 
    rev(nr); 
    cout << nr; 
    return 0; 
} 

程序的最終結果:打印相同的號碼,函數沒有影響。我究竟做錯了什麼?我嘗試了幾個解決方案,但無濟於事。

+1

你不是用函數的返回值來翻譯nr。 – kunigami 2012-04-12 15:46:03

+2

對於這樣一個簡單的問題,很多錯誤的答案...... – 2012-04-12 15:50:49

回答

7

您需要更改rev(nr);nr = rev(nr);

或交替改變你的函數:你不是實際使用值rev回報

void rev(int& x) 
{ 
    int r = 0; 
    while(x) 
    { 
     r = (r*10) + (x%10); 
     x = x/10; 
    } 
    x = r; 
} 
+0

這很好,但是你需要在這種情況下使rev返回void。 – Benj 2012-04-12 15:48:33

+0

@Benj已經修復。 – mydogisbox 2012-04-12 15:48:57

+0

這有效。謝謝! – Bugster 2012-04-12 15:50:45

1

。您只是使用您傳遞的值nr,因爲您不通過引用傳遞,rev在本地不受影響。

你想說的是:

int nr; 
cout << "Give a number: "; 
cin >> nr; 
int result = rev(nr); 
cout << result; 
return 0; 
4

你這樣做是對的,但你不抓住你的返回值(反轉值)。

爲了解決這個問題,只是分配或打印的返回值:

cout << rev(nr); 

nr = rev(nr); 
cout << nr; 
+0

這也是一個有效的答案,除了mydogisbox的答案這也適用。 – Bugster 2012-04-12 15:52:57

2

雖然可能不是預期精神,簡單的回答是,如果你只打算以反向顯示,您可以作弊,只需使用字符串:

std::string input; 

std::cin >> input; 

std::cout << std::string(input.rbegin(), input.rend()); 
+0

或者直接在字符串上使用'std :: reverse'。 (我從來沒有在生產代碼中找到這個函數的用法,但是因爲它在那裏:-)) – 2012-04-12 16:08:30

+0

@JamesKanze:是的,這也應該起作用。我不能說我曾經在真實的代碼中使用它 - 可能至少是我沒有想到它的一部分原因。 – 2012-04-12 16:11:57

+0

最初這段代碼是爲C語言編寫的,它沒有任何字符串,但是我用C++編寫了它,感謝這個。 – Bugster 2012-04-12 16:12:37

1

有一個STL中的函數,它適用於集合。

#include <algorithm> 
#include <iostream> 
#include <string> 

int main() { 

    long int i = 0; 
    do { 
    std::cout << "Gimme a number: " << std::endl; 
    } while (not (std::cin >> i)); // make sure it *is* a number 

    std::string display = std::to_string(i); // C++11 

    std::reverse(display.begin(), display.end()); 

    std::cout << display << "\n"; 
}