大数相乘:两个位数很长的数相乘(整型无法存储整型范围:(0x80000000<=x<=0x7fffffff));求解步骤:在牛客网上看到的此题:思路用两个整型数组模拟两个数的乘法过程:被乘数a,乘数b,结果result:1、首先初始化一个长度为a.length+b.length的数组用来存放结果。2、为了便于计算将整型数组a和b高位和地位进行置换,例如:a={1,2,3,4,5,6},置换后a={6,5,4,3,2,1}3、根据两个数相乘进位的思想进行编程:a[i]*b[j]相乘放在result[i+j]中;举个例子:a=23,b=18,置换后,a={3,2},b{8,1};4、对得到的初步result数组进行进位处理,24向上进位2,然后19变为21;21在向上进位2,2变为4;所以result最终结果为:result={4,1,4}。5、对result进行高位和地位置换输出:414(抱歉,举得例子结果对称的,看不出效果,大家可以自己举个例子试试)代码:
package com.renhq.bignumbermut;import java.util.Scanner;public class BigNumberMul{public int[] a;//被乘数public int[] b;//乘数public int[] result;//结果public static void main(String[] args){String a,b;Scanner s =new Scanner(System.in);a = s.next();b = s.next();BigNumberMul bm = new BigNumberMul(a,b);bm.bigMul();}public BigNumberMul(){}public BigNumberMul(String a,String b){toStrings(a,b);}public void toStrings(String sa,String sb){//将乘数转换为两个字符数组,初始化结果数组,高位与地位对应char[] ca=sa.toCharArray();char[] cb=sb.toCharArray();a = new int[ca.length];b = new int[cb.length];for(int i=ca.length-1,j=0;i>=0;i--,j++){a[j]=ca[i]-‘0‘;}for(int i=cb.length-1,j=0;i>=0;i--,j++){b[j]=cb[i]-‘0‘;}result = new int[a.length+b.length];}public void bigMul(){for(int i=0;i<a.length;i++){//将a的i位上的数依次乘以b的各个位上的数然后保存在i+j的位置上for(int j=0;j<b.length;j++){result[i+j]+=a[i]*b[j];}}int jinwei=0;for(int i=0;i<result.length;i++){//处理进位result[i]+=jinwei;jinwei=result[i]/10;result[i]=result[i]%10;}int flag=0;for(int i=result.length-1;i>=0;i--){//输出结果。高位的0不输出if(flag!=0||result[i]!=0){if(flag==0)flag++;System.out.print(result[i]结果测试:
原文:http://www.cnblogs.com/renhq/p/4690139.html