[c sharp]binarny algorytm NWD

0

Witam. Mam program napisany w C++ szukający NWD - największego wspólnego dzielnika dwóch liczb, ale mam problem z napisaniem tego samego w C sharp. Mógłbym prosić o pomoc?

 #include <iostream>

using namespace std;

int main()
{
  unsigned int a,b,k,r;

  cin >> a >> b;
  if(!a || !b)
    cout << (a | b) << endl;
  else
  {
    for(k = 0; !((a | b) & 1); k++)
    {
      a >>= 1;
      b >>= 1;
    }
    do
    {
      if(!a)
      {
        a = b; break;
      }
      while(!(a & 1)) a >>= 1;
      while(!(b & 1)) b >>= 1;
      if(a < b)
      {
        r = (b - a) >> 1;
        b = a;
        a = r;
      }
      else a = (a - b) >> 1;
    } while(b);
    if(k) a <<= k;
    cout << a << endl;
  }
  return 0;
} 

a to próba napisania w c sharp

int a,b,k,r;
            a = Convert.ToInt32(txt1.Text);
            b = Convert.ToInt32(txt2.Text);
            if (a == 0)
                richTextBox1.Text = b.ToString();
            else
                if (b == 0)
                {
                    richTextBox1.Text = a.ToString();
                }

                else
                {
                    for (k = 0; ((a | b) & 1)==0; k++)
                    {
                        a >>= 1;
                        b >>= 1;
                    }
                    do
                    {
                        if (a==0)
                        {
                            a = b; break;
                        }
                        while ((a & 1)==0) a >>= 1;
                        while ((b & 1)==0) b >>= 1;
                        if (a < b)
                        {
                            r = (b - a) >> 1;
                            b = a;
                            a = r;
                        }
                        else a = (a - b) >> 1;
                    } while (b==0);
                    if (k>0) a <<= k;
                    richTextBox1.Text = a.ToString();
                } 
1

przerobione z C++ mechanicznie, bez wdawania się w sens kodu:

using System;
 
class Program
{

static int Main()
{
  uint a,b,k,r;

  a = uint.Parse(Console.ReadLine());
  b = uint.Parse(Console.ReadLine());
  if(a==0 || b==0)
     Console.WriteLine(a | b);
  else
  {
     for(k = 0; ((a | b) & 1) == 0; k++)
     {
       a >>= 1;
       b >>= 1;
     }
     do
     {
       if(a==0)
       {
         a = b; break;
       }
       while((a & 1)==0) a >>= 1;
       while((b & 1)==0) b >>= 1;
       if(a < b)
       {
         r = (b - a) >> 1;
         b = a;
         a = r;
       }
       else a = (a - b) >> 1;
     } while(b!=0);
     if(k!=0) a <<= (int)k;
     Console.WriteLine(a);
  }
  return 0;
}

}

działa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1