第一次尝试-在 C# 中使用循环和列表 <> 将十进制转换为二进制的代码
First try - code for Decimal to Binary in C# with loop and list<>
我是 C# 的新手,但是我已经尝试编写将十进制转换为二进制的代码,我知道还有很多其他方法,可能还有很多更简单的方法,但我只是想尝试这种方式 - 使用列表。有人可以告诉我我做错了什么吗?
谢谢!
static void Main(string[] args)
{
long decimalNum = long.Parse(Console.ReadLine());
long divideNumber = decimalNum;
List<string> BinaryResult = new List<string>();
for (int i = 0; divideNumber == 0; i++)
{
long divideBytwo = divideNumber % 2;
if (divideBytwo == 1)
{
BinaryResult.Add("1");
}
if (divideBytwo == 0)
{
BinaryResult.Add("0");
}
divideNumber /= 2;
}
for (int i = 0; i < BinaryResult.Count; i++)
{
Console.Write(BinaryResult[BinaryResult.Count - i]);
}
}
有没有整数列表的方法或者..我完全错了吗?
几件事:
在您的第一个 for
循环中,divideNumber == 0
与您想要的相反:它表示您希望循环到 运行 只要 divideNumber
为零,而您真正想要的是 运行 until divideNumber
的循环为零.请尝试 divideNumber != 0
。
在你的第二个 for
循环中,如果 BinaryResult
包含任何数据,你将得到一个越界异常。您正在尝试读取索引 1 到 x
(其中 x
是列表中的项目数),而有效索引是 0 到 x - 1
。您可以修复索引,或者因为您正在以与创建它们相反的顺序访问元素,您可能会发现使用 Stack<T>
而不是 List<T>
更直观。
如果您只需要将数字转换为二进制,就使用它:
int value = 8;
string binary = Convert.ToString(value, 2);
一种可能的解决方案是按照@Joe 的建议使用 Stack。我还使用了字符串生成器而不是使用字符串列表。请记住,我也在学习 C#,所以我的答案可能不是最好的。
static void Main(string[] args)
{
long decimalNum = long.Parse(Console.ReadLine());
StringBuilder sb = new StringBuilder();
Stack<String> BinaryResult = new Stack<string>();
while (decimalNum > 0)
{
var rem = decimalNum%2;
BinaryResult.Push(rem.ToString());
decimalNum = decimalNum/2;
}
while (BinaryResult.Count > 0)
{
sb.Append(BinaryResult.Pop().ToString());
}
Console.WriteLine(sb.ToString());
Console.ReadLine();
}
我是 C# 的新手,但是我已经尝试编写将十进制转换为二进制的代码,我知道还有很多其他方法,可能还有很多更简单的方法,但我只是想尝试这种方式 - 使用列表。有人可以告诉我我做错了什么吗? 谢谢!
static void Main(string[] args)
{
long decimalNum = long.Parse(Console.ReadLine());
long divideNumber = decimalNum;
List<string> BinaryResult = new List<string>();
for (int i = 0; divideNumber == 0; i++)
{
long divideBytwo = divideNumber % 2;
if (divideBytwo == 1)
{
BinaryResult.Add("1");
}
if (divideBytwo == 0)
{
BinaryResult.Add("0");
}
divideNumber /= 2;
}
for (int i = 0; i < BinaryResult.Count; i++)
{
Console.Write(BinaryResult[BinaryResult.Count - i]);
}
}
有没有整数列表的方法或者..我完全错了吗?
几件事:
在您的第一个
for
循环中,divideNumber == 0
与您想要的相反:它表示您希望循环到 运行 只要divideNumber
为零,而您真正想要的是 运行 untildivideNumber
的循环为零.请尝试divideNumber != 0
。在你的第二个
for
循环中,如果BinaryResult
包含任何数据,你将得到一个越界异常。您正在尝试读取索引 1 到x
(其中x
是列表中的项目数),而有效索引是 0 到x - 1
。您可以修复索引,或者因为您正在以与创建它们相反的顺序访问元素,您可能会发现使用Stack<T>
而不是List<T>
更直观。
如果您只需要将数字转换为二进制,就使用它:
int value = 8;
string binary = Convert.ToString(value, 2);
一种可能的解决方案是按照@Joe 的建议使用 Stack。我还使用了字符串生成器而不是使用字符串列表。请记住,我也在学习 C#,所以我的答案可能不是最好的。
static void Main(string[] args)
{
long decimalNum = long.Parse(Console.ReadLine());
StringBuilder sb = new StringBuilder();
Stack<String> BinaryResult = new Stack<string>();
while (decimalNum > 0)
{
var rem = decimalNum%2;
BinaryResult.Push(rem.ToString());
decimalNum = decimalNum/2;
}
while (BinaryResult.Count > 0)
{
sb.Append(BinaryResult.Pop().ToString());
}
Console.WriteLine(sb.ToString());
Console.ReadLine();
}