码迷,mamicode.com
首页 > 其他好文 > 详细

大数相乘

时间:2015-07-30 18:56:00      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:

大数相乘:两个位数很长的数相乘(整型无法存储整型范围:(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]
结果测试:
 技术分享   
  




大数相乘

标签:

原文地址:http://www.cnblogs.com/renhq/p/4690139.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!