3 回答

TA貢獻1846條經驗 獲得超7個贊
這是與其他答案類似的方法。
要點:
我們通過找到一個數字除以 10 時的余數來計算最后一位數字(即
lastDigit = number % 10;
)要丟棄數字的最后一位,只需將其除以 10。
當以這種方式查找數字時,它們當然會以相反的順序返回(最低有效數字在前),因此您必須顛倒數字才能得到正確的答案。一種方法是從 char 數組的末尾存儲到開頭。
負數必須特別處理。最簡單的方法是記下數字是負數,以便
-
在適當的時候添加符號;然后,否定數字使其為正。但是,請注意,您不能 negateint.MinValue
,因此必須特別處理。您可以通過將數字
char
添加到 char'0'
并將結果轉換回char
.
這是一種使用這些要點的方法:
public static string MyToString(int number)
{
if (number == int.MinValue)
return "-2147483648"; // Special case.
char[] digits = new char[64]; // Support at most 64 digits.
int last = digits.Length;
bool isNegative = number < 0;
if (isNegative)
number = -number;
do
{
digits[--last] = (char) ('0' + number % 10);
number /= 10;
}
while (number != 0);
if (isNegative)
digits[--last] = '-';
return new string(digits, last, digits.Length-last);
}
我認為您要問的主要部分是如何一個接一個地獲取數字的數字,do/while上面的循環回答了這個問題。

TA貢獻1797條經驗 獲得超4個贊
我不明白為什么不允許您使用任何庫。但是,如果您需要完全手動進行轉換,您可以這樣做
private static string IntToString(int i)
{
string[] digits = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};
string sign = (i < 0 ? "-" : "");
var absI = (i < 0 ? -i : i);
string result = "";
while (absI != 0)
{
int digit = absI % 10;
result = digits[digit] + result;
absI = (absI - digit) / 10;
}
return sign + result;
}
上面的代碼不能正常工作為零。如果您需要,添加起來非常簡單。

TA貢獻2080條經驗 獲得超4個贊
例如,您可以將您的號碼拆分為單個字符:
// Note that this is just for example and for positive numbers only.
IEnumerable<char> ToChar(int num)
{
while (num > 0)
{
// adding '0' to number will return char for that number
char ch = (char)(num % 10 + '0');
num /= 10;
yield return ch;
}
}
然后基于此創建新字符串:
string ToString(int num)
{
// ToChar will return char collection in reverse order,
// so you will need to reverse collection before using.
// Well in your situation you will be probably needed to
// to write Reverse method by yourself, so this is just for
// working example
var chArray = ToChar(num).Reverse().ToArray();
string str = new string(chArray);
return str;
}
和用法:
int i = 554;
string str = ToString(i);
參考:DotNetFiddle 示例(使用簡化的 ToChar() 方法)
- 3 回答
- 0 關注
- 120 瀏覽
添加回答
舉報