我试图编写一个用于反转二进制数字的程序。例如,13的二进制表示是1101,而它的反转给出了1011,这对应于数字11对吗?
这是我的代码:
static void Main(string[] args)
{
Console.WriteLine("Enter a Number");
int numb = int.Parse(Console.ReadLine());
int reverse = 0;
while (numb > 0)
{
int rem = numb % 10;
reverse = (reverse * 10) + rem;
numb = numb / 10;
}
Console.WriteLine("Reverse number={0}", reverse);
Console.ReadLine();
}
通过此代码我只能得到要反转的数字(13 - > 31)......
输入应该包含一个整数 N,1≤N≤1000000000的单行,我希望我的输出在一行中有一个整数,我希望通过反转二进制表示得到的数字 N 。
答案 0 :(得分:8)
像这样的东西
Convert.ToString(value, 2)
说明:
"1101"
返回二进制表示中的值(Reverse().ToArray()
)'1','0','1','1'
- 将字符串(char[]
)反转为字符序列并转换为数组new String(...)
。"1011"
从char
Convert.ToInt32(..., 2)
int
将二进制表示转换回(AtomicInteger a).addAndGet(-1)
答案 1 :(得分:0)
您可以使用Convert.ToString
和Convert.ToInt32
方法,其中2表示二进制:
int numb = int.Parse(Console.ReadLine());
var reversedString = Convert.ToString(numb, 2).ReverseString();
var result = Convert.ToInt32(reversedString, 2);
...
public static string ReverseString(this string s)
{
char[] arr = s.ToCharArray();
Array.Reverse(arr);
return new string(arr);
}
答案 2 :(得分:0)
有趣的练习是在不使用string
转换的情况下执行此操作。
我很少有点经验,所以可能有更快更好的方法,但这似乎有效:
public static IEnumerable<bool> ToBinary(this int n)
{
for (int i = 0; i < 32; i++)
{
yield return (n & (1 << i)) != 0;
}
}
public static int ToInt(this IEnumerable<bool> b)
{
var n = 0;
var counter = 0;
foreach (var i in b.Trim().Take(32))
{
n = n | (i ? 1 : 0) << counter;
counter++
}
return n;
}
private static IEnumerable<bool> Trim(this IEnumerable<bool> list)
{
bool trim = true;
foreach (var i in list)
{
if (i)
{
trim = false;
}
if (!trim)
{
yield return i;
}
}
}
现在你这样称呼它:
var reversed = n.ToBinary().Reverse().ToInt();