我要扭轉整數的位置這樣反轉整數位的位置?
輸入= 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;
}
我要扭轉整數的位置這樣反轉整數位的位置?
輸入= 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;
}
您的循環終止得太早。更改
}while(num/i!=0);
到
}while((num*10)/i!=0);
得到一個更迭代,你的代碼將工作。
好,記住該整數除法總是向下舍入(或者它趨向於零?)在C中。那麼如果num < 10
和i = 10
是num/i
?
如果您嘗試一次,您會看到您的錯誤。
輸入:12
第一循環:
出:12%10 = 2/1 = 2
I = 100
測試:12/100 = 0(作爲整數)
過早放棄一個。
一種解決方案可以測試
(NUM%我)!= NUM
正如許多解決方案之一。
取代你的while語句
與
while (i<10*num)
這裏是一個解決方案
int num = 12345;
int new_num = 0;
while(num > 0)
{
new_num = new_num*10 + (num % 10);
num = num/10;
}
cout << new_num << endl;
如果我這樣做,我會(可能)通過創造新的價值開始一個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());
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;
}
公共類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);
}
}
這是我大學課程的編碼任務。這個任務剛剛討論了C++中的運算符重載。雖然它沒有說明是否應將重載用於轉讓。
以下代碼僅適用於兩位數字。
#include<iostream>
using namespace std;
int main() {
int n;
cin >> n;
cout << (n%10) << (n/10);
return 0;
}
這個問題是相當古老,已經有**許多**適用於比2位數更普遍的情況的答案。爲什麼你的答案更好? –
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;
}
}
請添加對您提議的解決方案的描述。 –
我只是做到了這一點,但是這是適用高達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;
}`
不幸的是,它不具有可擴展性: - /也許你可以採用它來擴展更大的數字? –
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
你要處理的數值爲整數,也可以對付他們作爲字符串或字符數組? –
只有整數,我不能使用循環或選擇以外的任何東西... – bbjkdsfj
很多重複在SO上(似乎是一個家庭作業問題,每年這個時候都會出現) - 請參閱[c程序的反向數字](http://stackoverflow.com/questions/2351251/c-program-for-the-reverse-the-digits) –