C#中将int类型转换为char类型
Change an int type into char type in C#
我正在尝试逐位分解非常大的数字,然后将它们一个一个地相加(对于大数计算器)。
条件是我不应该使用任何 Math 或 BigNumbers 库,并且输入必须采用字符串形式。
我这样做的方法是获取字符串,将每个字符串放入 (char)
列表中,然后转换每个 (char) to (int)
并执行操作,然后将结果数字改回(char)
然后将其添加到我命名为 Result 的列表中。
我想知道我应该如何将 (int) 更改为 (char)? “Convert.ToChar()”不起作用,因为它将数字转换为其 Unicode 字符 。
这是代码,我标记了问题:
bool carry = false;
int i = bigNumberLength - 1;
List<char> result = new List<char>();
char currentDigit;
for (int j = smallNumberLength - 1; j >= 0; j--)
{
int tempDigit1 = (int)Char.GetNumericValue(bigNumber[i]);
int tempDigit2 = (int)Char.GetNumericValue(smallNumber[j]);
if (tempDigit1 + tempDigit2 < 10)
{
if (!carry)
{
currentDigit = Convert.ToChar(tempDigit1 + tempDigit2);//this one
carry = false;
}
else
{
if (tempDigit1 + tempDigit2 + 1 < 10)
currentDigit = Convert.ToChar(tempDigit1 + tempDigit2 + 1);//this one
else
currentDigit = Convert.ToChar(0); //this one
}
result.Add(currentDigit);
}
else
{
currentDigit = Convert.ToChar((tempDigit1 + tempDigit2) - 10); //this one
carry = true;
result.Add(currentDigit);
}
i--;
}
举个例子,我已经完成了加法并只使用了字符串,但您可以将其替换为列表的逻辑,并以相同的方式进行其他数学运算并进行一些更改:
private const char O = '0';
public static void Main()
{
var num1 = "55555555555555555555555555555555555555578955555555555555";
var num2 = "55555555555555555555555555";
var result = string.Empty;
var num1Index = num1.Length - 1;
var num2Index = num2.Length - 1;
var temp = 0;
while (true)
{
if (num1Index >= 0 && num2Index >= 0)
{
var sum = ((temp + num1[num1Index--] - O) + (num2[num2Index--] - O));
result = sum % 10 + result;
temp = sum / 10;
}
else if (num1Index < 0 && num2Index >= 0)
{
result = temp + (num2[num2Index--] - O) + result;
temp = 0;
}
else if (num1Index >= 0 && num2Index < 0)
{
result = temp + (num1[num1Index--] - O) + result;
temp = 0;
}
else
{
break;
}
}
Console.WriteLine(result);
}
第一个 if 语句执行实际的数学运算,其余的只是附加其余的数字,以防它们具有不同的长度。
以及脚本产生的输出:
并再次将 int 转换为 char 您可以通过添加例如
进行转换
(char)([some digit hier] + '0')
我正在尝试逐位分解非常大的数字,然后将它们一个一个地相加(对于大数计算器)。
条件是我不应该使用任何 Math 或 BigNumbers 库,并且输入必须采用字符串形式。
我这样做的方法是获取字符串,将每个字符串放入 (char)
列表中,然后转换每个 (char) to (int)
并执行操作,然后将结果数字改回(char)
然后将其添加到我命名为 Result 的列表中。
我想知道我应该如何将 (int) 更改为 (char)? “Convert.ToChar()”不起作用,因为它将数字转换为其 Unicode 字符 。 这是代码,我标记了问题:
bool carry = false;
int i = bigNumberLength - 1;
List<char> result = new List<char>();
char currentDigit;
for (int j = smallNumberLength - 1; j >= 0; j--)
{
int tempDigit1 = (int)Char.GetNumericValue(bigNumber[i]);
int tempDigit2 = (int)Char.GetNumericValue(smallNumber[j]);
if (tempDigit1 + tempDigit2 < 10)
{
if (!carry)
{
currentDigit = Convert.ToChar(tempDigit1 + tempDigit2);//this one
carry = false;
}
else
{
if (tempDigit1 + tempDigit2 + 1 < 10)
currentDigit = Convert.ToChar(tempDigit1 + tempDigit2 + 1);//this one
else
currentDigit = Convert.ToChar(0); //this one
}
result.Add(currentDigit);
}
else
{
currentDigit = Convert.ToChar((tempDigit1 + tempDigit2) - 10); //this one
carry = true;
result.Add(currentDigit);
}
i--;
}
举个例子,我已经完成了加法并只使用了字符串,但您可以将其替换为列表的逻辑,并以相同的方式进行其他数学运算并进行一些更改:
private const char O = '0';
public static void Main()
{
var num1 = "55555555555555555555555555555555555555578955555555555555";
var num2 = "55555555555555555555555555";
var result = string.Empty;
var num1Index = num1.Length - 1;
var num2Index = num2.Length - 1;
var temp = 0;
while (true)
{
if (num1Index >= 0 && num2Index >= 0)
{
var sum = ((temp + num1[num1Index--] - O) + (num2[num2Index--] - O));
result = sum % 10 + result;
temp = sum / 10;
}
else if (num1Index < 0 && num2Index >= 0)
{
result = temp + (num2[num2Index--] - O) + result;
temp = 0;
}
else if (num1Index >= 0 && num2Index < 0)
{
result = temp + (num1[num1Index--] - O) + result;
temp = 0;
}
else
{
break;
}
}
Console.WriteLine(result);
}
第一个 if 语句执行实际的数学运算,其余的只是附加其余的数字,以防它们具有不同的长度。
以及脚本产生的输出:
并再次将 int 转换为 char 您可以通过添加例如
进行转换(char)([some digit hier] + '0')