ある関数で A を計算し、別の関数で B を計算している (A div B ) mod C を実行する方法は?
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 に答える