无法合并算法伪代码

时间:2015-09-18 07:25:48

标签: c# binary

无法实现给我的伪代码算法:

伪代码:

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#)

0 个答案:

没有答案