1
어떻게 수행합니까 (A div B) mod C 하나의 함수에서 A를 계산하고 다른 함수에서 B를 계산합니까 C는 (10 pow 9 plus 7) A 및 B 모두 C보다 클 수 있습니다. 또는 INT_MAXLONG_MAX를 초과 할 수있는 수학 함수를 수행하려면 어떻게해야합니까?
어떻게 수행합니까 (A div B) mod C 하나의 함수에서 A를 계산하고 다른 함수에서 B를 계산합니까 C는 (10 pow 9 plus 7) A 및 B 모두 C보다 클 수 있습니다. 또는 INT_MAXLONG_MAX를 초과 할 수있는 수학 함수를 수행하려면 어떻게해야합니까?
유일한 문제는 오래 사용할 수있는 크기의 경우입니다. 숫자가 long.MAX_VALUE
보다 클 수 있다면 문자열을 사용하여 계산할 함수가 필요하거나 두 개 이상의 long
유형을 사용하고 자신의 함수를 만들어야합니다. 예를 들어 더하기 함수는 두 개의 long
유형을 가져오고 그 합이 작은 지 (즉, MAX_SIZE를 초과했는지 확인) 숫자가 포함 된 배열 long
을 반환하고, 하나는 캐리 비트, 한 개는 합계입니다. 여기 는 C#의 예이지만, 내 계산에 말 A를에서로 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;
}
}
그런 다음 사용 오래 오래 실패하는 경우에도 어떤'긴 long' ... –
.. ??로 번역하는 것은 쉽다 10 퍼트 100이 나오니? –
그러면 구글 "GMP". –