2016-06-19 33 views
3

大的BigInteger我想創建一個遊戲層出不窮,如點擊悍將,Clicker的英雄,等我有一個BigInteger類,能夠只要它們裝入內存代表任意大的整數。C#格式任意無盡的遊戲

現在我有一個格式化BigInteger轉換爲特定格式的類。它使用K(千),M(百萬),B(十億),T(萬億),Q(四萬億)作爲「較小」的數字,但在此之後,短手符號變得模糊和不直觀。由於Quintillion,Q已經不明確,但我可以忍受。

Q之後,我想從字母A開始。因此1000Q = 1.000a,然後1000a = 1.000b等等。當達到1000z時,它應該被格式化爲1.000aa。然後1000aa = 1.000 ab,1000 az = 1.000 ba,1000 bz = 1.000 ca等

到目前爲止我已經達到上述目的,但是我的班級無法在1000zz之後格式化數字。我還沒有想出一個通用算法來自動確定需要多少個字符(可能是非常大的數字)。

我的類看起來如下:

public class NumericalFormatter : BigIntegerFormatter 
{ 
    public string Format(BigInteger number) 
    { 
     return FormatNumberString(number.ToString()); 
    } 

    private string FormatNumberString(string number) 
    { 
     if (number.Length < 5) 
     { 
      return number; 
     } 

     if (number.Length < 7) 
     { 
      return FormatThousands(number); 
     } 

     return FormatGeneral(number); 
    } 

    private string FormatThousands(string number) 
    { 
     string leadingNumbers = number.Substring(0, number.Length - 3); 
     string decimals = number.Substring(number.Length - 3); 

     return CreateNumericalFormat(leadingNumbers, decimals, "K"); 
    } 

    private string CreateNumericalFormat(string leadingNumbers, string decimals, string suffix) 
    { 
     return String.Format("{0}.{1}{2}", leadingNumbers, decimals, suffix); 
    } 

    private string FormatGeneral(string number) 
    { 
     int amountOfLeadingNumbers = (number.Length - 7) % 3 + 1; 
     string leadingNumbers = number.Substring(0, amountOfLeadingNumbers); 
     string decimals = number.Substring(amountOfLeadingNumbers, 3); 

     return CreateNumericalFormat(leadingNumbers, decimals, GetSuffixForNumber(number)); 
    } 

    private string GetSuffixForNumber(string number) 
    { 
     int numberOfThousands = (number.Length - 1)/3; 

     switch (numberOfThousands) 
     { 
      case 1: 
       return "K"; 
      case 2: 
       return "M"; 
      case 3: 
       return "B"; 
      case 4: 
       return "T"; 
      case 5: 
       return "Q"; 
      default: 
       return GetProceduralSuffix(numberOfThousands - 5); 
     } 
    } 

    private string GetProceduralSuffix(int numberOfThousandsAfterQ) 
    { 
     if (numberOfThousandsAfterQ < 27) 
     { 
      return ((char)(numberOfThousandsAfterQ + 96)).ToString(); 
     } 

     int rightChar = (numberOfThousandsAfterQ % 26); 
     string right = rightChar == 0 ? "z" : ((char)(rightChar + 96)).ToString(); 
     string left = ((char)(((numberOfThousandsAfterQ - 1)/26) + 96)).ToString(); 

     return left + right; 
    } 
} 

正如你可以看到getProceduralSuffix()方法無法處理將導致超過兩個字符的後綴BigIntegers。此刻

namespace UnitTestProject.BigIntegerTest 
{ 
    [TestClass] 
    public class NumericalformatterTest 
    { 
     [TestMethod] 
     public void TestFormatReturnsNumericalFormat() 
     { 
      BigIntegerFormatter numericalFormatter = new NumericalFormatter(); 

      foreach (string[] data in DpNumbersAndNumericalFormat()) 
      { 
       BigInteger number = new BigInteger(data[0]); 
       string expectedNumericalFormat = data[1]; 

       Assert.AreEqual(expectedNumericalFormat, numericalFormatter.Format(number)); 
      } 
     } 

     private string[][] DpNumbersAndNumericalFormat() 
     { 
      return new string[][] 
      { 
       new string[] { "0", "0" }, 
       new string[] { "1", "1" }, 
       new string[] { "15", "15" }, 
       new string[] { "123", "123" }, 
       new string[] { "999", "999" }, 
       new string[] { "1000", "1000" }, 
       new string[] { "9999", "9999" }, 
       new string[] { "10000", "10.000K" }, 
       new string[] { "78456", "78.456K" }, 
       new string[] { "134777", "134.777K" }, 
       new string[] { "999999", "999.999K" }, 
       new string[] { "1000000", "1.000M" }, 
       new string[] { "12345000", "12.345M" }, 
       new string[] { "999999000", "999.999M" }, 
       new string[] { "1000000000", "1.000B" }, 
       new string[] { "12345678900", "12.345B" }, 
       new string[] { "123345678900", "123.345B" }, 
       new string[] { "1233000000000", "1.233T" }, 
       new string[] { "9999000000000", "9.999T" }, 
       new string[] { "12233000000000", "12.233T" }, 
       new string[] { "99999000000000", "99.999T" }, 
       new string[] { "100000000000000", "100.000T" }, 
       new string[] { "456789000000000", "456.789T" }, 
       new string[] { "999999000000000", "999.999T" }, 
       new string[] { "1000000000000000", "1.000Q" }, 
       new string[] { "10000000000000000", "10.000Q" }, 
       new string[] { "100000000000000000", "100.000Q" }, 
       new string[] { "999999000000000000", "999.999Q" }, 
       new string[] { "1000000000000000000", "1.000a" }, 
       new string[] { "10000000000000000000", "10.000a" }, 
       new string[] { "100000000000000000000", "100.000a" }, 
       new string[] { "1000000000000000000000", "1.000b" }, 
       new string[] { "1000000000000000000000000", "1.000c" }, 
       new string[] { "1000000000000000000000000000", "1.000d" }, 
       new string[] { "1000000000000000000000000000000", "1.000e" }, 
       new string[] { "1000000000000000000000000000000000", "1.000f" }, 
       new string[] { "1000000000000000000000000000000000000", "1.000g" }, 
       new string[] { "1000000000000000000000000000000000000000", "1.000h" }, 
       new string[] { "1000000000000000000000000000000000000000000", "1.000i" }, 
       new string[] { "1000000000000000000000000000000000000000000000", "1.000j" }, 
       new string[] { "1000000000000000000000000000000000000000000000000", "1.000k" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000", "1.000l" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000", "1.000m" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000", "1.000n" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000", "1.000o" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000", "1.000p" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000", "1.000q" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000", "1.000r" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000", "1.000s" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000t" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000u" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000v" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000w" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000x" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000y" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000z" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000aa" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000ab" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000ac" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000ad" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000ae" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000af" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000ag" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000ah" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000ai" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000aj" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000ak" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000al" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000am" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000an" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000ao" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000ap" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000aq" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000ar" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000as" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000at" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000au" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000av" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000aw" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000ax" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000ay" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000az" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000ba" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000bb" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000bc" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000bd" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000be" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000bf" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000bg" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000bh" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000bi" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000bj" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000bt" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000by" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000bz" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000ca" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000cb" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000cc" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000cd" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000ce" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000ct" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000cy" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000cz" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000da" }, 
       new string[] { "1234000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.234da" }, 
       new string[] { "123456000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "123.456da" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000db" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000dr" }, 
       new string[] { "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.000dz" }, 
      }; 
     } 
    } 
} 

上述所有通試驗:

我也有一個單元測試,驗證了該類的功能(對於一些側滾動準備)。被遺漏的測試是一個檢查,如果1000^(26^3 + 5)(+5是因爲a格式Q後開始)可以被格式化成「1.000aaa」。

我怎麼去在我上面所描述的方式格式化程序上大的整數。

+0

我不在這裏看到一個問題。 –

+0

我認爲這個問題可能來自帖子,爲完整性增加了明確的問題。謝謝;) –

+0

你需要一個for循環來創建大於二的字符。 – jdweng

回答

1

在數字符號的世界裏,這實際上是一個解決的問題。也就是說,您可以改用scientific notation來表示這些特別大的數字。科學記數法是緊湊的,允許任意精度的尾數,並且容易理解。就我個人而言,這是我會採取的方法。

爲了便於討論,讓我們來看看你有&hellip什麼其他替代品;


表面上,你的請求歸結爲一個直接的數字基值到文本轉換。正如我們可以將數值轉換爲其基數2,基數10,基數16等中的文本表示,我們可以使用基數26將數值轉換爲文本表示,僅使用字母az作爲數字。

然後你GetProceduralSuffix()方法會是這個樣子:

static string GetProceduralSuffix(int value) 
{ 
    StringBuilder sb = new StringBuilder(); 

    while (value > 0) 
    { 
     int digit = value % 26; 

     sb.Append((char)('a'+ digit)); 
     value /= 26; 
    } 

    if (sb.Length == 0) 
    { 
     sb.Append('a'); 
    } 

    sb.Reverse(); 
    return sb.ToString(); 
} 

其中Reverse()擴展方法是這樣的:

public static void Reverse(this StringBuilder sb) 
{ 
    for (int i = 0, j = sb.Length - 1; i < sb.Length/2; i++, j--) 
    { 
     char chT = sb[i]; 

     sb[i] = sb[j]; 
     sb[j] = chT; 
    } 
} 

然而,與上述一個小問題。以這種方式表示的基數26中,數字a對應於0,因此您的後綴將永遠不會以字母a開頭,至少不會在第一個後面開始(這是特殊情況,就像使用小數表示法時一樣,我們使用數字0本身代表零值)。例如,您將在zz之後zbaa之後獲得ba

個人而言,我認爲沒關係。它會排除像aaaz這樣的後綴,但僅僅是因爲後綴符號系統是合乎邏輯的,可預測的並且容易顛倒的(即給出一個後綴,用數字表示它的意義是微不足道的)。

但是,如果你堅持一個像a&hellip; zaa&hellip; zzaaa&hellip; zzzaaaa&hellip;等等,你可以使用基數27而不是26,並使用除a以外的其他字符。 z0數字,並預先計算後綴,跳過值爲0的數字,然後對結果進行索引。例如:

List<string> _hackedValues = new List<string>(); 

static void PrecomputeValues() 
{ 
    // 531441 = 27^4, i.e. the first 5-digit base 27 number. 
    // That's a large enough number to ensure that the output 
    // include "aaaz", and indeed almost all of the 4-digit 
    // base 27 numbers 
    for (int i = 0; i < 531441; i++) 
    { 
     string text = ToBase27AlphaString(i); 

     if (!text.Contains('`')) 
     { 
      _hackedValues.Add(text); 
     } 
    } 
} 

static string GetProceduralSuffix(int value) 
{ 
    if (hackedValues.Count == 0) 
    { 
     PrecomputeValues(); 
    } 

    return _hackedValues[value]; 
} 

static string ToBase27AlphaString(int value) 
{ 
    StringBuilder sb = new StringBuilder(); 

    while (value > 0) 
    { 
     int digit = value % 27; 

     sb.Append((char)('`'+ digit)); 
     value /= 27; 
    } 

    if (sb.Length == 0) 
    { 
     sb.Append('`'); 
    } 

    sb.Reverse(); 
    return sb.ToString(); 
} 

這裏是示出這兩種技術,示出了用於「有趣」的輸入文本一個完整的程序(即,其中的字符的輸出改變的次數):

class Program 
{ 
    static void Main(string[] args) 
    { 
     int[] values = { 0, 25, 26, 675, 676 }; 

     foreach (int value in values) 
     { 
      Console.WriteLine("{0}: {1}", value, ToBase26AlphaString(value)); 
     } 

     Console.WriteLine(); 

     List<Tuple<int, string>> hackedValues = new List<Tuple<int, string>>(); 

     for (int i = 0; i < 531441; i++) 
     { 
      string text = ToBase27AlphaString(i); 

      if (!text.Contains('`')) 
      { 
       hackedValues.Add(Tuple.Create(i, text)); 
      } 
     } 

     Tuple<int, string> prev = null; 

     for (int i = 0; i < hackedValues.Count; i++) 
     { 
      Tuple<int, string> current = hackedValues[i]; 

      if (prev == null || prev.Item2.Length != current.Item2.Length) 
      { 
       if (prev != null) 
       { 
        DumpHackedValue(prev, i - 1); 
       } 
       DumpHackedValue(current, i); 
      } 

      prev = current; 
     } 
    } 

    private static void DumpHackedValue(Tuple<int, string> hackedValue, int i) 
    { 
     Console.WriteLine("{0}: {1} (actual value: {2})", i, hackedValue.Item2, hackedValue.Item1); 
    } 

    static string ToBase26AlphaString(int value) 
    { 
     return ToBaseNAlphaString(value, 'a', 26); 
    } 

    static string ToBase27AlphaString(int value) 
    { 
     return ToBaseNAlphaString(value, '`', 27); 
    } 

    static string ToBaseNAlphaString(int value, char baseChar, int numericBase) 
    { 
     StringBuilder sb = new StringBuilder(); 

     while (value > 0) 
     { 
      int digit = value % numericBase; 

      sb.Append((char)(baseChar + digit)); 
      value /= numericBase; 
     } 

     if (sb.Length == 0) 
     { 
      sb.Append(baseChar); 
     } 

     sb.Reverse(); 
     return sb.ToString(); 
    } 
} 

static class Extensions 
{ 
    public static void Reverse(this StringBuilder sb) 
    { 
     for (int i = 0, j = sb.Length - 1; i < sb.Length/2; i++, j--) 
     { 
      char chT = sb[i]; 

      sb[i] = sb[j]; 
      sb[j] = chT; 
     } 
    } 
} 
+0

謝謝!我已經將其納入我的程序,它的工作原理:)你可能會詳細說明你爲什麼選擇531441?另外,我已經有了一個使用科學記數法的科學記數器,但是我會給用戶在兩種模式之間切換的選項,因爲這種顯示方式可能不會讓一些人感到困惑,而且它有不同的感覺。 –

+1

@Thijs:見編輯。我已經添加了一條評論,解釋了我選擇該循環的上限。當然,您可以使用任何足以滿足您特定場景的數字,並且顯而易見的時間/內存摺衷。 –