2011-01-26 21 views
5
ben bu

Tam sayı basamaklarının konumunu tersine çevirmek?

girişi gibi tamsayı pozisyonunu tersine çevirmek zorunda

= 12345

çıkış =

54321 ben bu ama yanlış çıktı eG 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

Değerlerle tamsayı olarak ilgilenmek mi yoksa onlarla dizeler veya karakter dizileri olarak ilgilenir misiniz? –

+0

sadece tamsayı, döngüler veya seçimden başka bir şey kullanamıyorum ... – bbjkdsfj

+0

Çoğunda (Çoğunda bir çok soru var gibi gözüküyor) (örneğin yılın bu zamanını kesen ev ödevi gibi görünüyor) - bkz. [basamakları tersine programlayın] (http://stackoverflow.com/questions/2351251/c-program-for-the-reverse-the-digits) –

cevap

10

Döngünüz çok erken bitiyor. bir daha yinelemeyi almak için

}while(num/i!=0); 

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

geçin ve kod çalışacaktır.

0

Peki verir, hatırlamak yapılan Tamsayı bölmesi her zaman C'de aşağı doğru yuvarlanıyor (ya da sıfıra doğru mı?). Yani num < 10 ve i = 10 ise ne olurdu?

2

Örnek olarak bir kez denerseniz, hatayı görürsünüz.

giriş: 12

birinci döngü:

üzerinden% 12 10 = 2/1 = 2
i = 100
Test: 12/100 = 0 (bir tamsayı olarak) çok erken bir sıfatı iptal eder.

bir çözüm

(num% i)! = Num birçok çözümleri

gibi birini test edilebilir.

0

İşte
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

bunu yaptıklarını, ben (muhtemelen) yeni bir değer olarak oluşturarak başlardım bir çözümdür

ile while ifadesi yerine Bir int ve sonra bu değeri yazdırın. Bence bu, kodu biraz basitleştirmeli.pseudocode olarak, böyle bir şey bakmak istiyorum: diğer bariz bir olasılık önce bir dizeye dönüştürmek olacaktır

output = 0; 

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

ardından ters dışarı dize yazdırmak:

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

kamu sınıf 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

Bu benim üniversite kursu için kodlama görevidir. Bu ödev, C++’daki Operatör Aşırı Yüklemesi hakkında bir tartışmadan sonra gelir. Her ne kadar atama için aşırı yükleme kullanılması gerekip gerekmediğini netleştirmez.

0

Aşağıdaki kod yalnızca iki basamaklı bir sayı için çalışır.

#include<iostream> 
using namespace std; 

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

Bu soru oldukça eski ve zaten çok ** var ** 2 basamaktan daha genel durumlar için çalışan cevaplar. Cevabınız neden daha iyi? –

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

Lütfen önerdiğiniz çözümün açıklamasını ekleyin. –

-1

Ben sadece bu yapmış ancak bu 5 basamaklı sayılar kadar geçerlidir ama bu herhangi bit tersine dönecektir

#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

Ne yazık ki ölçeklenebilir değil: - Belki de daha büyük numaralar için ölçeklenebilir hale getirebilirsin? –

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

yardımcı olur umarım imzalı veya imzasız tamsayı (kısa, bayt, int, uzun ...). Geri döndürürken bitleri çerçevelemek için ek parametre nBits sağlayabilirsiniz.

i. e. 7 8 bit = 00000111 -> 11100000 7 4 bit = 0111 -> 1110

İlgili konular