【问题标题】:how do I perform mathematical functions that may exceed LONG_MAX如何执行可能超过 LONG_MAX 的数学函数
【发布时间】:2013-07-04 18:49:05
【问题描述】:

我如何执行 (A div B) mod C,其中我在一个函数中计算 A,在另一个函数中计算 B,并且 C 是说 (10 pow 9 plus 7),但 A 和 B 都可能大于 C,或 INT_MAX

【问题讨论】:

  • 那你用long long...
  • 如果 long long 失败了怎么办..??如我计算中的 A 是 10 pow 100 ?
  • 然后你用谷歌搜索“GMP”。
  • 我们在这里说什么语言?看起来像 C/C++,但是...?
  • 是的,它是 C/C++,如果我想在在线法官/ideone 上运行它,我不能使用 GMP,不是吗..?

标签: max modulo factorial exponentiation large-data


【解决方案1】:

如果唯一的问题是您可以使用 long 的数字的大小。如果数字可能大于long.MAX_VALUE,那么您需要一些函数来使用字符串进行计算,或者使用两个或更多long 类型,并制作自己的函数。例如,plus 函数将得到两个long 类型,检查它们的总和是否小于其中一个(意味着它们超过了 MAX_SIZE),然后返回一个 long 数组,包含数字,一个用于进位位,一个用于求和。 这是一个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;
  }
}

【讨论】:

    猜你喜欢
    • 2019-06-13
    • 1970-01-01
    • 1970-01-01
    • 2018-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-15
    • 2021-09-16
    相关资源
    最近更新 更多