【问题标题】:reverse the position of integer digits?反转整数位的位置?
【发布时间】:2011-06-15 22:11:00
【问题描述】:

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

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

【问题讨论】:

  • 您必须将值作为整数处理还是可以将它们作为字符串或字符数组处理?
  • 只有整数,我不能使用除了循环或选择之外的任何东西......
  • SO 上已经有很多重复项(似乎是每年这个时候出现的家庭作业问题) - 参见例如[反转数字的c程序](stackoverflow.com/questions/2351251/…)

标签: c++ logic


【解决方案1】:

这是一个解决方案

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

【讨论】:

    【解决方案2】:

    您的循环过早终止。改变

    }while(num/i!=0);
    

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

    再进行一次迭代,您的代码就可以工作了。

    【讨论】:

      【解决方案3】:

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

      输入:12

      第一个循环:

      出局:12%10 = 2 / 1 = 2
      我 = 100
      测试:12/100 = 0(作为整数)

      过早中止一个。

      一个解决方案可能正在测试

      (num % i) != 数量

      只是众多解决方案之一。

      【讨论】:

        【解决方案4】:

        好吧,记住整数除法在 C 中总是向下舍入(或者是向零?)。那么,如果 num &lt; 10i = 10num / i 会是什么?

        【讨论】:

          【解决方案5】:

          替换你的while语句

          while (i<10*num)
          

          【讨论】:

            【解决方案6】:

            如果我这样做,我(可能)首先创建一个新值作为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());
            

            【讨论】:

              【解决方案7】:
              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;
              
              
              } 
              

              【讨论】:

                【解决方案8】:

                这是我大学课程的编码作业。这个作业是在讨论 C++ 中的运算符重载之后发布的。虽然不清楚是否应该使用重载来分配。

                【讨论】:

                  【解决方案9】:

                  以下代码仅适用于两位数。

                  #include<iostream>
                  using namespace std;
                  
                  int main() {
                      int n;
                      cin >> n;
                      cout << (n%10) << (n/10);    
                  return 0;
                  }
                  

                  【讨论】:

                  • 这个问题已经很老了,已经有 许多 答案,它们适用于比 2 位数字更普遍的情况。为什么你的答案更好?
                  【解决方案10】:
                  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;
                  }
                  

                  }

                  【讨论】:

                  • 请添加您提出的解决方案的描述。
                  【解决方案11】:
                  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 以在反转时对位进行构图。

                  我。 e. 7 位 8 位 = 00000111 -> 11100000 7 合 4 位 = 0111 -> 1110

                  【讨论】:

                    【解决方案12】:

                    公共类 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);
                    
                    }
                    

                    }

                    【讨论】:

                      【解决方案13】:

                      我只是简单地做到了这一点,但这适用于最多 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;
                      }`
                      

                      【讨论】:

                      • 遗憾的是它不可扩展:-/也许你也可以采用它来扩展更大的数字?
                      猜你喜欢
                      • 2017-11-18
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2016-01-04
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多