我之前已经问过这样的问题,但他们都使用字符串。
这些问题的最常见答案是:
转换为字符串并取number.Length - 1
。但是我不想使用字符串。
除以10,但这仅适用于整数。如果我有1.12并将其除以10我就得不到2.
将数字转换为数组,然后将其反转。这与使用字符串相同,但更多的工作,而不是我正在寻找的。 p>
所以我的问题是,如果我输入像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)
答案 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;
}