[英]Reverse double in c# without using string or array
我知道以前有人問過這樣的問題,但它們都使用字符串。
此類問題的最常見答案是:
轉換為字符串並取number.Length - 1
。 但是我不想使用字符串。
除以 10,但這僅適用於整數。 如果我有 1.12 並將其除以 10,則不會得到 2。
將數字轉換為數組,然后將其反轉。 這與使用字符串相同,但需要更多的工作,而不是我想要的。
所以我的問題是,如果我有像 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.