大数相乘

大数相乘:两个位数很长的数相乘(整型无法存储整型范围:(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(抱歉,举得例子结果对称的,看不出效果,大家可以自己举个例子试试)

代码:

  1. package com.renhq.bignumbermut;
  2. import java.util.Scanner;
  3. public class BigNumberMul{
  4. public int[] a;//被乘数
  5. public int[] b;//乘数
  6. public int[] result;//结果
  7. public static void main(String[] args){
  8. String a,b;
  9. Scanner s =new Scanner(System.in);
  10. a = s.next();
  11. b = s.next();
  12. BigNumberMul bm = new BigNumberMul(a,b);
  13. bm.bigMul();
  14. }
  15. public BigNumberMul(){
  16. }
  17. public BigNumberMul(String a,String b){
  18. toStrings(a,b);
  19. }
  20. public void toStrings(String sa,String sb){//将乘数转换为两个字符数组,初始化结果数组,高位与地位对应
  21. char[] ca=sa.toCharArray();
  22. char[] cb=sb.toCharArray();
  23. a = new int[ca.length];
  24. b = new int[cb.length];
  25. for(int i=ca.length-1,j=0;i>=0;i--,j++){
  26. a[j]=ca[i]-'0';
  27. }
  28. for(int i=cb.length-1,j=0;i>=0;i--,j++){
  29. b[j]=cb[i]-'0';
  30. }
  31. result = new int[a.length+b.length];
  32. }
  33. public void bigMul(){
  34. for(int i=0;i<a.length;i++){//将a的i位上的数依次乘以b的各个位上的数然后保存在i+j的位置上
  35. for(int j=0;j<b.length;j++){
  36. result[i+j]+=a[i]*b[j];
  37. }
  38. }
  39. int jinwei=0;
  40. for(int i=0;i<result.length;i++){//处理进位
  41. result[i]+=jinwei;
  42. jinwei=result[i]/10;
  43. result[i]=result[i]%10;
  44. }
  45. int flag=0;
  46. for(int i=result.length-1;i>=0;i--){//输出结果。高位的0不输出
  47. if(flag!=0||result[i]!=0){
  48. if(flag==0)flag++;
  49. System.out.print(result[i]
结果测试:
    
  




posted @ 2015-07-30 18:01  renhq  阅读(294)  评论(0编辑  收藏  举报