大數相乘(浮點數)實現
1 首先判定字串輸入是否合格(是否含有其他非法字元)
2 去掉字串多餘的0
3 提取小數點位置,吧小數點後面有幾位記錄下來,最後結果中確定結果含有幾位小數點,然後在加上(結果小數點的位數=兩個字串小數點後位數相加)
4 用字串實現大數相乘(去掉小數點),對結果進行復原(在合理位置加上小數點),
5去掉多餘的0
public static void main(String[] srgs) {
new Decimal().Resolve();
}
public void Resolve(){
String d1,d2;
int floatnum1=0;
int floatnum2=0;
d1=Input();
d2=Input();
//去0
d1=RemoveZeroBegin(d1);
d1=RemoveZeroEnd(d1);
d2=RemoveZeroBegin(d2);
d2=RemoveZeroEnd(d2);
String[] decimal1=d1.split(",");
String[] decimal2=d2.split(",");
//去小數點
if(decimal1.length>1)
{
floatnum1=decimal1[1].length();
d1=decimal1[0]+decimal1[1];
}
if(decimal2.length>1)
{
d2=decimal2[0]+decimal2[1];
floatnum2=decimal2[1].length();
}
//相乘
String sbString = Multiply(d1, d2);
StringBuilder sb=new StringBuilder(sbString);
//復原小數點
if(floatnum1+floatnum2!=0)
{
sb.insert(sbString.length()-floatnum1-floatnum2, ',');
}
sbString=sb.toString();
//繼續去0
sbString=RemoveZeroBegin(sbString);
sbString=RemoveZeroEnd(sbString);
System.out.println(sbString);
}
@SuppressWarnings("resource")
public String Input() {
Scanner input=new Scanner(System.in);
return input.next();
}
String Multiply(String s1,String s2) {
int len1=s1.length();
int len2=s2.length();
int[] res=new int[len1+len2];
for(int i=0;i<res.length;i++) {
res[i]=0;
}
for(int i=s1.length()-1;i>=0;i--) {
for(int j=s2.length()-1;j>=0;j--) {
res[ len1-1-i + len2-1-j] += (s1.charAt(i)-'0') * (s2.charAt(j)-'0');
}
}
String sb="";
for(int i=0;i<res.length-1;i++) {
res[i+1] += res[i]/10;
res[i]%=10;
sb+= res[i];
}
sb+=res[res.length-1];
sb = Reverse(sb);
return sb;
}
String Reverse(String str){
char[] chars = str.toCharArray();
String reverse = "";
for (int i = chars.length - 1; i >= 0; i--) {
reverse += chars[i];
}
return reverse;
}
String RemoveZeroBegin(String str) {
String s="";
int i=0;
while(str.charAt(i)=='0' && i<str.length() && str.charAt(i+1)!=',') {
i++;
}
s=str.substring(i, str.length());
return s;
}
String RemoveZeroEnd(String str) {
String s="";
int i=str.length()-1;
while(str.charAt(i)=='0') {
i--;
if(str.charAt(i)==',') {
i--;
break;
}
}
s=str.substring(0, i+1);
return s;
}
題目中的小數點我用的是 “,” 因為我用了java的split函式,開啟原始碼發現在split函式裡面吧 “.” 遮蔽了所以暫時用逗號代替一下,如圖:
if (((regex.value.length == 1 &&
".$|()[{^?*+\\".indexOf(ch = regex.charAt(0)) == -1) ||
(regex.length() == 2 &&
regex.charAt(0) == '\\' &&
(((ch = regex.charAt(1))-'0')|('9'-ch)) < 0 &&
((ch-'a')|('z'-ch)) < 0 &&
((ch-'A')|('Z'-ch)) < 0)) &&
(ch < Character.MIN_HIGH_SURROGATE ||
ch > Character.MAX_LOW_SURROGATE))
而且因為我沒學過java,java實驗要用java來寫,所以java程式碼寫的很爛。。。。。。。
相關文章
- javascript如何解決浮點數相乘出現誤差問題JavaScript
- 浮點數表示及其實現.
- 大數相乘解決方案
- (陣列)大數相乘,相加陣列
- js實現如何保留float浮點數小數點後兩位JS
- 浮點數
- 浮點數演算法的內部實現演算法
- 浮點數的理解
- js實現的浮點數取整程式碼例項JS
- javascript實現浮點數四捨五入效果程式碼JavaScript
- 浮點數小知識點
- JavaScript浮點數保留兩位小數JavaScript
- 在Java中實現浮點數的精確計算 (轉)Java
- 淺談浮點數(一)
- 轉換成浮點數
- [譯]浮點數的危害
- Java浮點數計算Java
- Java大數相乘(使用BigInteger和BigDecimal)JavaDecimal
- MySQL 有意思的浮點數和定點數MySql
- Java中浮點數的坑Java
- JS中如何理解浮點數?JS
- python處理浮點數Python
- iOS浮點數精度問題iOS
- JavaScript 浮點數陷阱及解法JavaScript
- 我的IEEE浮點數工具
- 補碼、反碼、浮點數
- javascript將浮點數數變為整數簡單介紹JavaScript
- JS中浮點數精度問題JS
- js浮點數丟失問題JS
- 【Java】浮點數相等性比較Java
- 學習JAVA浮點數必看文章!Java
- 深入理解浮點數的表示
- 利用css變數實現按鈕懸浮效果CSS變數
- linux shell 實現 四則運算(整數及浮點) 簡單方法Linux
- Linux Shell 實現四則運算(整數及浮點)簡單方法Linux
- java實戰1——浮點數轉人民幣讀法Java
- input限制只能輸入整數或保留小數點後2位的浮點數
- JavaScript解決浮點數算數運算精度問題JavaScript