/** * 思路: * 两个100位以内正整数相乘,结果最多199位.考虑到最后处理进位时数组越界,所以用203位. * * 1.用两个字符串读入两个正整数. * 2.用双重循环将两个整数的每一位截取出来并分别相乘.结果暂存在result数组中. * 因为每一位最大为9,两位相乘最大为81.result数组中最大的元素也不大于8100, * 所以用int类型足够了. * 3.最后处理进位,因为最大为8100,所以只考虑千位,百位,十位,个位. * * * * 例如: 123 * 456 * * 1.先用3分别乘以6,5,4 * 数组中的结果为 : 18,15,12,0,0................0 * 2.用2分别乘以6,5,4 * 结果为: 18,15+12,12+10,0+8,0,0................0 * 3.用1分别乘以6,5,4 * 结果为: 18,15+12,12+10+6,0+8+5,0+4,0,0.............0 * 即: 18,27,28,13,4,0,0,..............0 * 4.处理进位 * 第一次循环后: 8,27+1,28................... * 第二次: 8,8,28+2,13................ * 第三次: 8,8,0,13+3,4............... * 第四次: 8,8,0,6,5,0,0.............. * 5.输出结果 * 从最高位开始检测,如果为零,则什么都不做,进行下一次循环,当遇到第一个不为零的数时,设置一个标志,然后依次输出结果为:56088 */ import java.io.*; public class BigNum { public static void main(String[] args) { /** * 用于存放两个输入整数的每一位 */ String sub1 = ""; String sub2 = ""; String num1,num2; //输入的两个整数 int result[] = new int[203]; //结果 try{ BufferedReader in = new BufferedReader( new InputStreamReader(System.in)); /** * 以字符串形似读入两个整数 */ System.out.print("输入一个整数:"); num1 = in.readLine(); System.out.print("再输入一个整数:"); num2 = in.readLine(); //分别指示两个整数的位数 int num1length = num1.length(); int num2length = num2.length(); int subNum1,subNum2,subNum3; int locate; //定位中间结果存放的位置 for(int i=num1length-1; i>=0; i--){ //截取整数的每位并转化成整数 sub1 = num1.substring(i, i+1); subNum1 = Integer.parseInt(sub1); for(int j=num2length-1; j>=0; j--){ locate = num1length +num2length - 2 -i -j; sub2 = num2.substring(j, j+1); subNum2 = Integer.parseInt(sub2); //依次用整数1的每一位乘以整数2的每一位,讲中间结果放入数组中,暂不考虑进位 subNum3 = subNum1 * subNum2; result[locate] += subNum3; } } /** * 处理进位 */ int qian,bai,shi,ge; //分别表示以当前位为基准的千位,百位,十位,个位 for(int i=0; i < 200; i++){ qian = result[i] / 1000; bai = (result[i]%1000) / 100; shi = (result[i]%100) /10; ge = result[i]%10; result[i] = ge; result[i+1] += shi; result[i+2] += bai; result[i+3] +=qian; } /** * 输出结果 */ System.out.println("结果是:"); boolean flag = false; for(int i=199; i>=0; i--){ if(flag==false && result[i] == 0){ continue; } flag = true; System.out.print(result[i]); } }catch (Exception e){ e.printStackTrace(); } } }