用C#實現二進位制的減法(包括二進位制小數)

小P同學發表於2015-11-11

用C#實現二進位制的減法(包括二進位制小數)

作為一個大學汪,我開始接觸程式設計。前兩天老師讓寫一個二進位制算術編碼,於是我遇到了這樣一個問題,怎麼實現二進位制數的減法。熬了兩天的夜,寫出了下面的程式碼。若有不對的地方大家海涵…

/// <summary>
/// 構建二進位制減法方法
/// </summary>
/// <param name="str">二進位制減數</param>
/// <param name="s">二進位制被減數</param>
/// <returns>二進位制得數</returns>
public string minus(string str, string s)
{
  string max = str;  
  string min = s;
  string num = s;
  for (int i = s.Length - 1; i >= 0; i--)
     {
      if (str[i] == '.') { }
      else
      {
        if (i == s.Length - 1)
        {
          if (max[i] == min[i])
          {
            num = num.Remove(i, 1);
            num += "0";
          }
         else if (max[i] == '1' && min[i] == '0')
         {
           num = num.Remove(i, 1);
           num += "1";
         }
         else
         {
          num = num.Remove(i, 1);
          num += "1";
          if (str[i - 1] == '.')
          {
           if (str[i - 2] == '1')
           {
             max = max.Remove(i - 2, 1);
             max = max.Insert(i - 2, "0");
           }
           else
           {
             max = max.Remove(i - 2, 1);
             max = max.Insert(i - 2, "1");
           }
         }
         else
         {
            if (str[i - 1] == '1')
            {
              max = max.Remove(i - 1, 1);
              max = max.Insert(i - 1, "0");
            }
            else
            {
              max = max.Remove(i - 1, 1);
              max = max.Insert(i - 1, "1");
            }
          }
        }
      }
      else if (i < s.Length - 1 && i > 0)
      {
         if (str[i + 1] == '0' && s[i + 1] == '1')
         {
            if (str[i - 1] == '.')
            {
               if (str[i - 2] == '0')
               {
                  max = max.Remove(i - 2, 1);
                  max = max.Insert(i - 2, "1");
               }
               else
               {
                  max = max.Remove(i - 2, 1);
                  max = max.Insert(i - 2, "0");
               }
             }
             else
             {
                if (str[i - 1] == '0')
                {
                  max = max.Remove(i - 1, 1);
                  max = max.Insert(i - 1, "1");
                }
                else
                {
                  max = max.Remove(i - 1, 1);
                  max = max.Insert(i - 1, "0");
                }
             }
             if (max[i] == min[i])
             {
                 num = num.Remove(i, 1);
                 num = num.Insert(i, "0");
             }
             else
             {
                 num = num.Remove(i, 1);
                 num = num.Insert(i, "1");
             }
           }
           else
           {
             if (max[i] == min[i])
             {
                num = num.Remove(i, 1);
                num = num.Insert(i, "0");
             }
          else if (max[i] == '1' && min[i] == '0')
          {
             num = num.Remove(i, 1);
             num = num.Insert(i, "1");
          }
          else
          {
            num = num.Remove(i, 1);
            num = num.Insert(i, "1");
            if (str[i - 1] == '.')
            {
               if (str[i - 2] == '1')
               {
                  max = max.Remove(i - 2, 1);
                  max = max.Insert(i - 2, "0");
               }
               else
               {
                  max = max.Remove(i - 2, 1);
                  max = max.Insert(i - 2, "1");
               }
             }
          else
          {
             if (str[i - 1] == '1')
             {
                max = max.Remove(i - 1, 1);
                max = max.Insert(i - 1, "0");
             }
             else
             {
                max = max.Remove(i - 1, 1);
                max = max.Insert(i - 1, "1");
             }
          }
        }
      }
     }
    else
    {
      if (max[i] == min[i])
      {
         num = num.Remove(i, 1);
         num = num.Insert(i, "0");
      }
      else
      {
         num = num.Remove(i, 1);
         num = num.Insert(i, "1");
      }
    }
  }
}
return num;
}

相關文章