09/11/07 03:28:13
>>456
前に見たような課題だな。
print()が遅いから計算だけをそれぞれ実行させた場合
BigInteger:45ms
Qinteger:80ms
くらいだった。あとは自力でチューニングしてみてくれ。
private int maxDigit = 0;
public Qinteger times(int n) {
long temp;
int carry = 0;
for (int i = MAXARR - 1; maxDigit < 0 && i >= 0; i--) if (num[i] != 0) { maxDigit = i; break; }
for (int i = 0; i < MAXARR && i <= maxDigit; i++) {
if (num[i] == 0) { num[i] = carry; carry = 0; continue; }
temp = (long)num[i] * n;
num[i] = carry + (int)(temp % MAXINT);
carry = (int)(temp / MAXINT);
if (i == maxDigit && carry != 0) maxDigit++;
}
return this;
}