我如何执行(A div B)mod C,我在一个函数中计算 A,在另一个函数中计算 B,C 是说(10 pow 9 加 7)但 A 和 B 都可能大于 C,或 INT_MAX
问问题
110 次
1 回答
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;
}
}
于 2013-07-07T06:03:54.370 回答