JAVA大數相乘
阿新 • • 發佈:2019-02-15
package huawei; import java.math.BigDecimal; public final class Demo { /***************************************************************************** Description : 兩個任意長度的長數相乘, 輸出結果 Input Param : String multiplierA 乘數A String multiplierB 乘數B Return Value : 乘法結果;如果資料異常,返回null *****************************************************************************/ public static String multiply (String multiplierA, String multiplierB) { if(!IsValidate(multiplierA)||!IsValidate(multiplierB)) return null; BigDecimal decA=new BigDecimal(multiplierA); BigDecimal decB=new BigDecimal(multiplierB); BigDecimal result=decA.multiply(decB); String resultStr=result.toPlainString(); boolean isDecimal=false; for(int i=0;i<resultStr.length();i++) { if(resultStr.charAt(i)=='.') { isDecimal=true; break; } } int endIndex=resultStr.length(); if(isDecimal) { for(endIndex=resultStr.length()-1;endIndex>=0;endIndex--) { if(resultStr.charAt(endIndex)!='0') break; } if(resultStr.charAt(endIndex)=='.') endIndex--; if(endIndex==-1) endIndex++; endIndex++; } return resultStr.substring(0,endIndex); } public static boolean IsValidate(String str) { if(str.equals("")) return false; int dotNums=0,len=str.length(); for(int i=0;i<len;i++) { if(i==0&&(str.charAt(i)=='-'||str.charAt(i)=='+')) { if(len>=2) continue; else return false; } if(str.charAt(i)=='.') { dotNums++;continue; } if(str.charAt(i)<'0'||str.charAt(i)>'9') return false; } if(dotNums>1) return false; else if(dotNums==1&&(str.charAt(0)=='.'||str.charAt(len-1)=='.')) return false; else return true; } }