繁体   English   中英

C ++中的数字反转

[英]Number Reversal in 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;
}

您应该避免使用pow它会返回一个double ,而你只想要操作的整数。 例如,假设arr[j] * pow(10,i)为753.99 ...,则强制转换只会将753放入rev_num 在某些情况下,这将起作用,但并非总是如此。 这是工作的机会五十。

尝试更换:

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

rev_num = rev_num * 10 + arr[j];

您是否尝试过四舍五入或添加.5? 这样还能解决您的问题吗?

下面的简单代码怎么样

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

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

这里显示的函数的所有代码示例均无效,因为该函数未处理有效的整数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!");
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM