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 关注
- 86 浏览
添加回答
举报