2011-09-25 36 views
0

我想讓我的代碼打印出任何整數輸入的反轉。沒有錯誤,只是沒有正確打印。我究竟做錯了什麼?反向數字輸入

#include<iostream> 
#include<conio.h> 

using namespace std; 

int num, n; 
int reverse(int); 

int main() 
{ 
    cout << "Enter a number less than 1000 to be reversed:" << endl; 
    cin >> num; 
    reverse(num); 
    cout << "reversed number is:"; 
    getch(); 
    return 0; 
} 

int reverse(int num) 
{ 
    long sum=0;int rem; 

    while(n>0) 
    { 
     rem=n%10; 
     sum=sum*10+rem; 
     n=n/10; 
     cout << sum << endl; 
    } 

    return sum; 
    cout << sum << endl; 
} 
+2

請出示的輸入,輸出和預期輸出。 –

+0

輸入234,輸出234,預期輸出432 – Sam

回答

2

n未初始化的程序,但你在while循環使用。

試試這個:

int reverse(int num) 
{ 
    int sum=0; 
    while(num>0) 
    { 
    sum=sum*10+ num %10; 
    num=num/10; 
    } 
    return sum; 
} 

而且,由於此函數返回一個整數,它是反向,你傳遞給函數的數量,你必須在調用點保存返回的值,如:

int revnum = reverse(num); //in your code, you're not doing this. 

現在看到完整的在線演示:http://ideone.com/hLnS1

順便說一句,避免全局變量:

int num, n; //avoid declaring these at global level. 

在本地範圍內定義它們,就像我在演示中看到的那樣(參見它)。

+0

我返回後在主循環中打印什麼? NUM? – Sam

+0

@Sam:查看演示:http://ideone.com/hLnS1。我已經用它更新了我的答案。 – Nawaz

0

如果將它作爲字符串對待,則反轉數字更容易。

例如

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

int main() 
{ 
    std::string sNum; 

    std::cout << "Enter a number:" << std::flush; 
    std::cin >> sNum; 
    std::reverse(sNum.begin(), sNum.end()); 
    std::cout << "\nThe reverse is \"" << sNum << "\""; 
    std::cout << "\n\nPress return to finish" << std::endl; 
    std::cin.get(); 
    return 0; 
} 

主要生產

Enter a number:123456789 

The reverse is "987654321" 

Press return to finish 
+0

確實比較容易。但速度較慢。 – 2011-09-25 17:03:37

+0

@WPT - 爲什麼它會變慢? cin/cout對字符數據進行操作,所以我們有從int到int的轉換,然後至少有與字符串反轉一樣多的操作。 –