簡體   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