大數相乘(浮點數)實現
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程式碼寫的很爛。。。。。。。
相關文章
- 大數相乘解決方案
- 浮點數
- 浮點數演算法的內部實現演算法
- Java大數相乘(使用BigInteger和BigDecimal)JavaDecimal
- 浮點數的理解
- 浮點數小知識點
- python處理浮點數Python
- 浮點數的比較
- IEEE浮點數表示法
- 浮點數加減法
- 淺談浮點數(一)
- 轉換成浮點數
- JavaScript浮點數保留兩位小數JavaScript
- iOS浮點數精度問題iOS
- JS中如何理解浮點數?JS
- 補碼、反碼、浮點數
- Java中浮點數的坑Java
- 利用css變數實現按鈕懸浮效果CSS變數
- 匹配浮點數正規表示式
- 【Java】浮點數相等性比較Java
- js浮點數丟失問題JS
- JS中浮點數精度問題JS
- 深入理解浮點數的表示
- IEEE754浮點數表示法
- [work] python list中數字與一個數相乘Python
- [譯] CSS 變數實現炫酷滑鼠懸浮效果CSS變數
- 利用CSS變數實現炫酷的懸浮效果CSS變數
- input限制只能輸入整數或保留小數點後2位的浮點數
- js中浮點數計算常用方法JS
- Java如何正確比較浮點數Java
- 深入理解浮點數的運算
- js精確比較浮點數大小JS
- js精確計算浮點數相加JS
- Python判斷字串是否為字母或者數字(浮點數)Python字串
- 【廖雪峰python入門筆記】整數和浮點數Python筆記
- JavaScript解決浮點數算數運算精度問題JavaScript
- Java浮點數運算實現四捨五入和格式化方法總結Java
- 利用CSS變數實現令人震驚的懸浮效果CSS變數