大数运算
乘法:
思路:用一个长度为两个字符串长度和的数组保存两个字符串下标的值(在新的数组中的下标就是这两个下标的和)相乘的结果,然后再第0位往后做进位处理,取余保存为当前位的值,去商加到下一位的值中,继续做相同的处理。
public String multiply(String num1,String num2) { num1=new StringBuilder(num1).reverse().toString(); num2=new StringBuilder(num2).reverse().toString(); int[] result=new int[num1.length()+num2.length()]; for(int i=0;i<num1.length();i++) { int a=num1.charAt(i)-'0'; for(int j=0;j<num2.length();j++) { int b=num2.charAt(j)-'0'; result[i+j]+=a*b; } } StringBuilder res=new StringBuilder(); for(int i=0;i<result.length-1;i++) { int dig=result[i]%10; int carry=result[i]/10; result[i+1]+=carry; res.insert(0,dig); } if(result[result.length-1]!=0) res.insert(0,result[result.length-1]); return res.toString(); }
加法,比乘法简单很多
public String Add(String num1,String num2) { num1=new StringBuilder(num1).reverse().toString(); num2=new StringBuilder(num2).reverse().toString(); int length=num1.length()>num2.length()?num1.length():num2.length(); int offset=num1.length()-num2.length(); if(offset>=0) { while(offset-->0) { num2+="0"; } } else { int temp=-offset; while(temp-->0) { num1+="0"; } } int[] result=new int[length]; for(int i=0;i<result.length;i++) { result[i]=num1.charAt(i)-'0'+num2.charAt(i)-'0'; } StringBuilder res=new StringBuilder(); for(int i=0;i<result.length-1;i++) { int dig=result[i]%10; int carry=result[i]/10; result[i+1]+=carry; res.insert(0,dig); } if(result[result.length-1]!=0) res.insert(0,result[result.length-1]); return res.toString(); }
本文来自博客园,作者:LeeJuly,转载请注明原文链接:https://www.cnblogs.com/peterleee/p/10613006.html

浙公网安备 33010602011771号