C ++中的数字反转

时间:2013-12-25 17:26:02

标签: c++

当我传递奇数位数时> 1到函数,我得到的实际结果比我应该得到的少1,并且代码对于偶数位数完全正常,我无法找出原因。

int rev_number(int num){
int arr [10];
int i=0;
int j=0;
int rev_num=0;
while(num > 0){
    arr[i] = num%10;
    num = num/10;
    i++;
}
i--;
while(i>=0){
    rev_num += arr[j] * pow(10,i);
        j++;
        i--;
    }
    return rev_num;
}

4 个答案:

答案 0 :(得分:3)

在您只想操纵整数时,应避免使用返回pow的{​​{1}}。例如,假设double的结果是753.99 ......,演员只会在arr[j] * pow(10,i)中放入753!在某些情况下,这将起作用,但并非总是如此。这是五十五个工作的机会。

尝试更换:

rev_num

rev_num += arr[j] * pow(10,i);

您是否尝试过圆形或添加.5?这也能解决你的问题吗?

答案 1 :(得分:3)

以下简单代码怎么样

int reverseNumber(int num) {
     int reverse = 0;
     while(num > 0) {
          reverse = reverse*10 + num%10;
          num = num/10;
     }
return reverse;
}

答案 2 :(得分:1)

由于pow处理浮点值,因此它的整数表示可能会被截断,因此某些值可能最终低于预期值。

更好的解决方案是使用整数数学,例如:

while(i>=0){
rev_num *= 10;
rev_num += arr[j];
    j++;
    i--;
}

还有其他几种方法可以表达相同的内容,并且将值存储在数组中并不是绝对必要的,您可以将模数值重新乘以。

但是,我最喜欢的“反向数字”是将其作为字符串读取,然后使用标准反向功能。

所以,像这样:

#include <string>
#include <algorithm>
#include <iostream>

int main()
{
   std::string s;
   std::cin >> s;
   std::reverse(s.begin(), s.end());
   std::cout << s << std::endl;
}

答案 3 :(得分:-1)

这里显示的函数的所有代码示例都是无效的,因为函数不处理有效的整数0.所以我决定显示一个正确的函数实现。:)

using System;

namespace ReverseNumberExercise
{
    class Program
    {
        static int ReverseNumber(int x)
        {
            int y = 0;

            do
            {
                long digit;
                x = ( int )Math.DivRem( x, 10L, out digit );
                y = y * 10 + ( int )digit;
            } while ( x != 0 );

            return (y);
        }

        static void Main()
        {
            while (true)
            {
                Console.Write("Enter an integral number: ");

                string input = Console.ReadLine();

                if (string.IsNullOrEmpty(input)) break;

                int x;

                if (!int.TryParse(input, out x))
                {
                    Console.WriteLine("Invalid number. Try again.");
                }

                Console.WriteLine("Reversed number is: {0}", ReverseNumber(x));

                Console.WriteLine();
            }

            Console.WriteLine("\nGood bye!");
        }
    }
}