簡體   English   中英

在 C# 中反轉雙精度而不使用字符串或數組

[英]Reverse double in c# without using string or array

我知道以前有人問過這樣的問題,但它們都使用字符串。

此類問題的最常見答案是:

  1. 轉換為字符串並取number.Length - 1 但是我不想使用字符串。

  2. 除以 10,但這僅適用於整數。 如果我有 1.12 並將其除以 10,則不會得到 2。

  3. 將數字轉換為數組,然后將其反轉。 這與使用字符串相同,但需要更多的工作,而不是我想要的。

所以我的問題是,如果我有像 1.12 這樣的輸入,我想要 21.1 但不使用任何字符串。 我想取 2 並將其另存為一個數字,然后取其余並添加點。

我想要這個問題的數學解決方案。

我會為您提供一些測試用例,以便您更好地了解我的問題。

23.45 => 54.32
0.50 => 05.0 => 5
4.3445242 => 2425443.4
232 => 232
123 => 321

而且我不想要字符串或數組,因為當您說“我不想要字符串”時,總會有人說“將數字轉換為數組,然后將其反轉”。 不...我只想使用計算,if-else 和循環(for,while,do while)

一種相對丑陋的方法本質上是將 double 提升為 long 並記住小數點。 然后將 long 反轉,然后將其除以總位數減去原始小數點。 此外,如果你想處理負數,你將不得不存儲符號和 Math.Abs​​ src double 你開始處理它。

private double Reverse(double src)
{
    double dst = 0;
    int decPoint = 0;          

    while (src - (long)src > 0)
    {
        src = src * 10;
        decPoint++;
    }

    int totalDigits = 0;

    while (src > 0)
    {
        int d = (int)src % 10;
        dst = dst * 10 + d;
        src = (long)(src / 10);
        totalDigits++;
    }        

    if (decPoint > 0)
    {
        int reversedDecPoint = totalDigits - decPoint;
        for (int i = 0; i < reversedDecPoint; i++) dst = dst / 10;
    }

    return dst;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM