反转整数位的位置?

时间:2011-01-26 15:14:28

标签: c++ logic

我必须像这样反转整数的位置

输入= 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;
}

12 个答案:

答案 0 :(得分: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;

答案 1 :(得分:10)

您的循环过早终止。变化

}while(num/i!=0);

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

再获得一次迭代,你的代码就可以了。

答案 2 :(得分:2)

如果您尝试一次作为示例,您将看到错误。

输入:12

第一个循环:

out :12%10 = 2/1 = 2
i = 100
测试:12/100 = 0(整数)

过早地中止了一次。

一种解决方案可能是测试

  

(num%i)!= num

正如众多解决方案中的一种。

答案 3 :(得分:0)

那么,请记住整数除法总是在C中向下舍入(或者它是否为零?)那么num / inum < 10i = 10为什么?

答案 4 :(得分:0)

替换你的while语句

while (i<10*num)

答案 5 :(得分: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());

答案 6 :(得分: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;


} 

答案 7 :(得分:0)

这是我大学课程的编码作业。在对C ++中的运算符重载进行讨论之后,才进行此分配。虽然它没有说清楚是否应该使用重载进行分配。

答案 8 :(得分: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;
}

}

答案 9 :(得分: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来在反转时对位进行帧化。

我。即 7比8比特= 00000111 - &gt; 11100000 7进4位= 0111 - &gt; 1110

答案 10 :(得分:-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);

}

}

答案 11 :(得分:-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;
}`