2011-01-26 51 views
5

我要扭轉整數的位置這樣反轉整數位的位置?

輸入= 12345

輸出= 54321

我提出這一點,但它給出錯誤的輸出如5432

#include <iostream> 
using namespace std; 

int main(){ 
int num,i=10; 
cin>>num; 

do{ 
    cout<< (num%i)/ (i/10); 
    i *=10; 
    }while(num/i!=0); 

return 0; 
} 
+0

你要處理的數值爲整數,也可以對付他們作爲字符串或字符數組? –

+0

只有整數,我不能使用循環或選擇以外的任何東西... – bbjkdsfj

+0

很多重複在SO上(似乎是一個家庭作業問題,每年這個時候都會出現) - 請參閱[c程序的反向數字](http://stackoverflow.com/questions/2351251/c-program-for-the-reverse-the-digits) –

回答

10

您的循環終止得太早。更改

}while(num/i!=0); 

}while((num*10)/i!=0); 

得到一個更迭代,你的代碼將工作。

0

好,記住該整數除法總是向下舍入(或者它趨向於零?)在C中。那麼如果num < 10i = 10num/i

2

如果您嘗試一次,您會看到您的錯誤。

輸入:12

第一循環:

:12%10 = 2/1 = 2
I = 100
測試:12/100 = 0(作爲整數)

過早放棄一個。

一種解決方案可以測試

(NUM%我)!= NUM​​

正如許多解決方案之一。

0

取代你的while語句

while (i<10*num) 
12

這裏是一個解決方案

int num = 12345; 
    int new_num = 0; 
    while(num > 0) 
    { 
      new_num = new_num*10 + (num % 10); 
      num = num/10; 
    } 
    cout << new_num << endl; 
0

如果我這樣做,我會(可能)通過創造新的價值開始一個int,然後打印出該值。我認爲這應該簡化代碼。由於僞代碼,它會看起來像:

output = 0; 

while (input !=0) 
    output *= 10 
    output += input % 10 
    input /= 10 
} 
print output 

其他明顯的可能性將轉換爲字符串,然後再進行打印字符串反向:

std::stringstream buffer; 

buffer << input; 

cout << std::string(buffer.str().rbegin(), buffer.str().rend()); 
0
int _tmain(int argc, _TCHAR* argv[]) 
{ 
int x = 1234; 
int out = 0; 
while (x != 0) 
{ 
    int Res = x % (10); 
    x /= 10; 
    out *= 10; 
    out += Res; 
} 
cout << out; 


} 
-1

公共類TestDS {

public static void main(String[] args) { 

    System.out.println(recursiveReverse(234)); 
      System.out.println(recursiveReverse(234 ,0)); 



} 



public static int reverse(int number){ 

    int reversedNumber = 0; 
    int temp = 0; 


    while(number > 0){ 

     //use modulus operator to strip off the last digit 
     temp = number%10; 

     //create the reversed number 
     reversedNumber = reversedNumber * 10 + temp; 
     number = number/10; 

    } 



    return reversedNumber; 

} 



private static int reversenumber =0; 
public static int recursiveReverse(int number){ 

    if(number <= 0){ 

     return reversenumber; 
    } 

    reversenumber = reversenumber*10+(number%10); 
    number =number/10; 

    return recursiveReverse(number); 

} 

public static int recursiveReverse(int number , int reversenumber){ 

    if(number <= 0){ 

     return reversenumber; 
    } 

    reversenumber = reversenumber*10+(number%10); 
    number =number/10; 

    return recursiveReverse(number,reversenumber); 

} 

}

0

這是我大學課程的編碼任務。這個任務剛剛討論了C++中的運算符重載。雖然它沒有說明是否應將重載用於轉讓。

0

以下代碼僅適用於兩位數字。

#include<iostream> 
using namespace std; 

int main() { 
    int n; 
    cin >> n; 
    cout << (n%10) << (n/10);  
return 0; 
} 
+0

這個問題是相當古老,已經有**許多**適用於比2位數更普遍的情況的答案。爲什麼你的答案更好? –

0
int a,b,c,d=0; 
cout<<"plz enter the number"<<endl; 
cin>>a; 
b=a; 
do 
{ 
    c=a%10; 
    d=(d*10)+c; 
    a=a/10; 
} 
while(a!=0); 
cout<<"The reverse of the number"<<d<<endl; 
if(b==d) 
{ 
    cout<<"The entered number is palindom"<<endl; 
} 
else 
{ 
    cout<<"The entered number is not palindom"<<endl; 
} 

}

+0

請添加對您提議的解決方案的描述。 –

-1

我只是做到了這一點,但是這是適用高達5個位數的電話號碼,但希望它有助於

#include<iostream> 
    using namespace std; 
void main() 
{ 
    int a,b,c,d,e,f,g,h,i,j; 
    cin>>a; 
    b=a%10; 
    c=a/10; 
    d=c%10; 
    e=a/100; 
    f=e%10; 
    g=a/1000; 
    h=g%10; 
    i=a/10000; 
    j=i%10; 
    cout<<b<<d<<f<<h<<j; 
}` 
+0

不幸的是,它不具有可擴展性: - /也許你可以採用它來擴展更大的數字? –

0
template <typename T> 
T reverse(T n, size_t nBits = sizeof(T) * 8) 
{ 
    T reverse = 0; 
    auto mask = 1; 

    for (auto i = 0; i < nBits; ++i) 
    { 
     if (n & mask) 
     { 
      reverse |= (1 << (nBits - i - 1)); 
     } 
     mask <<= 1; 
    } 

    return reverse; 
} 

這將扭轉任何位有符號或無符號整數(short,byte,int,long ...)。您可以提供額外的參數nBits,以便在反轉時構造位。

i。即 7 8位= 00000111 - > 11100000 7中4位= 0111 - > 1110