1

ある関数で A を計算し、別の関数で B を計算している (A div B ) mod C を実行する方法は?

4

1 に答える 1

1

唯一の問題が、長く使用できる数値のサイズである場合。数値が大きい場合は、long.MAX_VALUE文字列を使用して計算する関数が必要になるか、2 つ以上のlong型を使用して独自の関数を作成する必要があります。たとえば、plus 関数は 2 つのlongタイプを取得し、それらの合計がそれらの 1 つよりも小さいかどうかをチェックし (つまり、MAX_SIZE を超えていることを意味します) long、1 つはキャリー ビット用、もう 1 つは数値を含むの配列を返します。合計のために。これは C# の例ですが、C++ に変換するのは簡単です。

      public static string sum(long a, long b)
  {
     string sum;

     if (a + b > a && a + b > b)
     {
        sum = (a + b).ToString();
     }
     else
     {
        string aStr = a.ToString();
        string bStr = b.ToString();

        if (bStr.Length > aStr.Length)
        {
           string tmp = aStr;
           aStr = bStr;
           bStr = tmp;
        }

        sum = new string('0', aStr.Length + bStr.Length);
        char[] arr = sum.ToCharArray();

        for (int i = 0; i < bStr.Length; i++)
        {
           int loc = sum.Length - 1 - i;
           arr[loc] += (char)(aStr[aStr.Length - 1 - i] + bStr[bStr.Length - 1 - i] - '0' * 2);

           if (arr[loc] > '9')
           {
              arr[loc - 1] = '1';
              arr[loc] = (char)(arr[loc] - '9' - 1);
           }
        }

        for (int i = bStr.Length ; i < aStr.Length; i++)
        {
           int loc = sum.Length - 1 - i;
           arr[loc] += (char)(aStr[aStr.Length - 1 - i] - '0');


           if (arr[loc] > '9')
           {
              arr[loc - 1] = '1';
              arr[loc] = (char)(arr[loc] - '9' - 1);
           }
        }

        sum = new string(arr);

     }

     return sum;
  }
}
于 2013-07-07T06:03:54.370 に答える