无法实现给我的伪代码算法:
伪代码:
function ItBin2dec(v)
Input: An n-bit integer v ≥ 0 (binary digits)
Output: The vector w of decimal digits of v
w = []
for i =size(v) − 1 downto 0:
w =By2inDec(w)
if v is odd:
if w = []: w = [1]
else: w[0] = w[0] + 1
return w
算法By2inDec(z)将整数z的十进制数字向量作为输入,并返回2z的十进制数字向量。
到目前为止我所拥有的:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace myProg
{
class Program
{
static void Main(string[] args)
{
List<int> binaryInput = new List<int>();
List<int> testOutput = new List<int>();
Console.Write(testOutput.Count);
string input = Console.ReadLine();
for(int i = 0; i < input.Length; i++)
{
binaryInput.Add(Convert.ToInt32(input[i]));
}
testOutput = BinaryToDecimal(binaryInput);
for(int i = 0; i < testOutput.Count; i ++)
{
Console.Write(testOutput[i]);
}
Console.ReadKey();
}
static List<int> BinaryToDecimal(List<int> pInput)
{
List<int> decimalOutput = new List<int>();
for (int i = (pInput.Count-1); i > 0; i--)
{
decimalOutput = by2InDec(decimalOutput);
if (pInput[i] % 2 != 0)
{
if (decimalOutput.Count == 0)
{
decimalOutput.Add(1);
}
else
{
decimalOutput[0] = decimalOutput[0] + 1;
}
}
}
return decimalOutput;
}
static List<int> by2InDec(List<int> pVector)
{
int extra = 0;
int carry = 0;
List<int> testDummyList = new List<int>();
if(pVector.Count == 1 && pVector[0] == 0)
{
testDummyList.Add(0);
return testDummyList;
}
for(int i = 0; i < pVector.Count; i++)
{
extra = (pVector[i] * 2) + carry;
if(extra >= 10)
{
extra = extra - 10;
testDummyList.Add(extra);
carry = 1;
}
else
{
testDummyList.Add(extra);
carry = 0;
}
extra = 0;
}
if(carry == 1)
{
testDummyList.Add(1);
}
return testDummyList;
}
}
}
我本质上是试图在C#中不使用BigInteger
数据类型来转换巨大的二进制数,这是一个我失败的家庭作业。现在我想了解我所缺少的东西,或者我做错了什么。我不断回到那些毫无意义的怪异数字。 (语言是C#)