在不使用字符串或数组的情况下在c#中反向加倍

时间:2017-10-06 17:52:50

标签: c#

我之前已经问过这样的问题,但他们都使用字符串。

这些问题的最常见答案是:

  1. 转换为字符串并取number.Length - 1。但是我不想使用字符串。

  2. 除以10,但这仅适用于整数。如果我有1.12并将其除以10我就得不到2.

  3. 将数字转换为数组,然后将其反转。这与使用字符串相同,但更多的工作,而不是我正在寻找的。

  4. 所以我的问题是,如果我输入像1.12我想要21.1但不使用任何字符串。我想取2并将其保存为数字,然后取其余部分并添加点。

    我想要解决问题的数学解决方案。

    我将为您提供一些测试用例,以便您更好地理解我的问题。

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

    我不想要字符串或数组,因为当你说“我不想要字符串”时,总会有人说“将数字转换为数组然后反转”。不...我想只使用计算,if-else和cycle(for,while,do while)

1 个答案:

答案 0 :(得分:1)

一种相对丑陋的方式基本上会将这种方法提升为多长并记住小数点。然后反转长整数,然后除以总位数减去原点小数点。此外,如果你想处理负数,你必须存储符号和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;
}