因为做了一个练习题,要实现阶乘,阶乘的结果十分容易超出基本数据类型的存储上限,然后我就想做一个String类型实现的乘法.....没那么容易超限
public class T3 {
/**
* 三、 在数学中10!代表10的阶乘。既代表1*2*3*4....*10;
* 现在要求编程求出8!。
*/
public static void main(String[] args) {
int i = 8;
String sum = "1";
for (int j = 1; j < i+1; j++) {
sum = multiply(sum,""+j);
}
System.out.println("8!="+sum);
}
/**
* 实现大数相乘
* @param num1 String
* @param num2 String
* @return String
*/
public static String multiply(String num1,String num2){
int length1 = num1.length();
int length2 = num2.length();
int[] num = new int[length1+length2];//用来存储运算结果
for (int i = 0; i < length1; i++) {
int n1 = num1.charAt(length1-1-i)-'0';//逐一获得num1(没有参与运算)最后一位的数字
int temp = 0;//用来临时保存一位的中间结果
for (int j = 0; j < length2; j++) {
int n2 = num2.charAt(length2-1-j)-'0';//逐一获得num2(没有参与运算)最后一位的数字
temp = n1*n2 + temp + num[i+j];//当前数字相乘+本次循环的进位+上次循环的进位
num[i+j] = temp%10;//只取个位
temp /= 10;//进位保留
}
num[i+length2] = temp;//存储进位数字
}
//计算结果的长度
int i = length1+length2-1;
while(i>0 && num[i]==0){
i--;
}
//当前的结果个十百千,我们习惯看到的是千百十个
String str = "";
while(i>=0){
str += num[i];
i--;
}
return str;
}
}
|
|