51,409
社区成员
发帖
与我相关
我的任务
分享
[/quote]
那就用bigdecimal,对于你说的数组,我没读懂题意。
public class Sample {
public static void main(String[] args) {
try {
int max = 100;
int[] result = multiply(new int[] {1}, new int[] {2});
for (int i=3; i<=max; i++) {
int[] tmp = new int[i>99 ? 3 : (i>9 ? 2 : 1)]; //整数变为数组,这里为了省事,可以抽出写成一个方法
for (int j=tmp.length-1, k=i; k>0; j--, k /= 10) {
tmp[j] = k % 10;
}
result = multiply(result, tmp);
}
System.out.print("result=");
for (int i=0, j=0; i<result.length; i++) {
if (result[i] > 0) { //为了去除前面多余的0
j++;
}
if (j == 0) continue;
System.out.print(result[i]); //从不为0的数开始输出
}
System.out.println();
} catch (Throwable e) {
e.printStackTrace();
}
}
public static int[] multiply(int[] a, int[] b) {//数组乘法
int[] result = new int[a.length+b.length]; //相乘结果的最大位数不超过乘数的长度+被乘数的长度
for (int i=a.length-1, k=result.length-1; i>=0; i--, k--) {
for (int j=b.length-1; j>=0; j--) {
result[k] += a[i] * b[j] % 10;
result[k-1] += a[i] * b[j] / 10;
}
}
for (int k=result.length-1; k>0; k--) { //进位整理
if (result[k] > 9) {
result[k-1] += result[k] / 10;
result[k] %= 10;
}
}
return result;
}
}