亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

java大數乘法的簡單實現 浮點數乘法運算

2019-11-26 15:45:10
字體:
來源:轉載
供稿:網友

復制代碼 代碼如下:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 大數乘法的簡單實現, 目前還不是很完善
 * Fix:
 * 1. 修改前后刪除0的一些錯誤情況
 * 2. 支持負數運算
 * 3. 判斷輸入字符串是否符合小數定義, 用正則表達式判斷
 * @author icejoywoo
 * @since 2012.2.16
 * @version 0.1.1
 */
public class BigNumber {
    public static void main(String[] args) throws IOException {
        System.out.println("Input two large integers:");
        BufferedReader buffer = new BufferedReader(new InputStreamReader(System.in));
        String[] strArray = buffer.readLine().split("http://*");
        System.out.println(bigNumberMultiply(strArray[0], strArray[1]));
    }

    /**
     * 計算兩個任意大小和精度的數的乘積
     * @param first 第一個參數
     * @param second 第二個參數
     * @return 兩個數的乘積
     */
    private static String bigNumberMultiply(String first, String second) {
        // 正負號判斷標志
        boolean flag = false;

        if (first.charAt(0) == '-') {
            flag = !flag;
            first = first.substring(1);
        }

        if (second.charAt(0) == '-') {
            flag = !flag;
            second = second.substring(1);
        }

        // 小數點的位置
        int aPoints = first.length() - first.indexOf('.') - 1;
        int bPoints = second.length() - second.indexOf('.') - 1;
        int pointPos = aPoints + bPoints; // 結果的小數點位置

        // 刪除小數點
        StringBuffer aBuffer = new StringBuffer(first.replaceAll("http://.", ""));
        StringBuffer bBuffer = new StringBuffer(second.replaceAll("http://.", ""));

        int[] a = string2IntArray(aBuffer.toString());
        int[] b = string2IntArray(bBuffer.toString());

        int[] result = new int[a.length + b.length - 1]; // 保存結果的數組

        // 計算
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < b.length; j++) {
                result[i + j] += a[i] * b[j];
            }
        }

        // result中的某一位大于9的話需要進位
        for (int i = result.length - 1; i >= 0; --i) {
            if (result[i] > 9) {
                result[i - 1] += result[i] / 10;
                result[i] = result[i] % 10;
            }
        }

        StringBuffer buffer = new StringBuffer(); // 將result數組轉換為字符串
        for (int i = 0; i < result.length; ++i) {
            // 添加小數點
            if(result.length - i == pointPos) {
                buffer.append(".");
            }
            buffer.append(String.valueOf(result[i]));
        }

        if (buffer.indexOf(".") != -1)
        {
            // 刪除最開始的0
            int i = 0;
            while (i < buffer.length()) {
                if (buffer.length() > 2 && buffer.charAt(i+1) == '.') { // 小數點前只有一個數 0.
                    break;
                } else if (buffer.charAt(i) == '0') { // 刪除最前邊的0
                    buffer.deleteCharAt(i);
                    i = 0;
                    continue;
                } else { // 當第一位不是0的時候
                    break;
                }
            }

            // 刪除末尾的0
            i = buffer.length() - 1;
            while (i >= 0) {
                if (buffer.length() > 2 && buffer.charAt(i-1) == '.') { // 小數點后直接是數字
                    break;
                } else if (buffer.charAt(i) == '0') { // 刪除末尾的0
                    buffer.deleteCharAt(i);
                    i = buffer.length() - 1;
                    continue;
                } else { // 當最后一位不是0的時候
                    break;
                }
            }
        }

        // 根據符號位, 返回值的正負標志
        if (flag) {
            return "-" + buffer.toString();
        } else {
            return buffer.toString();
        }
    }

    /**
     * 將字符串裝換為數組
     * @param number
     * @return
     */
    private static int[] string2IntArray(String number) {
        // 判斷輸入是否符合浮點數的要求
        Pattern pattern = Pattern.compile("^(-?//d+|//d*)//.?//d*$");
        Matcher matcher = pattern.matcher(number);
        if (!matcher.find()) {
            throw new IllegalArgumentException("輸入的數不正確!");
        }

        int[] result = new int[number.length()];
        for (int i = 0; i < number.length(); i++) {
            result[i] = (int) (number.charAt(i) - '0');
        }
        return result;
    }
}

運行結果如下:

1. 錯誤輸入的判斷

復制代碼 代碼如下:

Input two large integers:
1a*a22
Exception in thread "main" java.lang.IllegalArgumentException: 輸入的數不正確!
at BigNumber.string2IntArray(BigNumber.java:132)
at BigNumber.bigNumberMultiply(BigNumber.java:54)
at BigNumber.main(BigNumber.java:22)


 2. 帶負數的運算, 前后帶有0的情況
復制代碼 代碼如下:

Input two large integers:
-23424.2300*02345.23400000
-54935300.61982

 python中計算的結果如下
復制代碼 代碼如下:

Python 2.6.5
>>> -23424.2300*02345.23400000
-54935300.619819999

 可以看出python的結果是有失真的

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲女性裸体视频| 欧美国产日韩一区二区三区| 久久福利视频导航| 51午夜精品视频| 日韩欧美在线一区| 欧美成人精品三级在线观看| 亚洲综合在线播放| 亚洲天堂网站在线观看视频| 国产精品白嫩美女在线观看| 中文字幕精品一区二区精品| 日韩欧美亚洲成人| 91久久久久久久一区二区| 国内精品伊人久久| 亚洲色图第一页| 日韩欧美视频一区二区三区| 国产精品久久久久高潮| 欧美极品美女视频网站在线观看免费| 成人午夜两性视频| 中文字幕av一区二区三区谷原希美| 国产mv免费观看入口亚洲| 91精品视频观看| 精品国产依人香蕉在线精品| 欧美极品美女视频网站在线观看免费| 国产精品99一区| 亚洲午夜久久久影院| 91网站在线免费观看| 成人性生交大片免费观看嘿嘿视频| 深夜福利亚洲导航| 亚洲成人黄色网| 国产精品视频永久免费播放| 国产日韩欧美自拍| 欧美日韩中文在线观看| 91精品在线播放| 夜夜嗨av一区二区三区免费区| 九九热99久久久国产盗摄| 国产有码在线一区二区视频| 丝袜亚洲欧美日韩综合| 国产精品a久久久久久| 亚洲免费视频观看| 欧美性xxxxxx| 亚洲欧洲视频在线| 国产精品美女www| 精品一区二区三区三区| 国产午夜精品全部视频播放| 成人福利网站在线观看| 日韩高清电影好看的电视剧电影| 欧美日韩国产精品| 国产精品视频地址| 九九精品视频在线观看| 国产精品69精品一区二区三区| 亚洲人成网站999久久久综合| 欧美中文在线免费| 国产视频在线观看一区二区| 欧美精品电影免费在线观看| 深夜福利一区二区| 久久精品美女视频网站| 亚洲电影免费观看高清完整版在线观看| 成人国内精品久久久久一区| 亚洲自拍偷拍色片视频| 国产日韩综合一区二区性色av| 秋霞成人午夜鲁丝一区二区三区| 亚洲色图狂野欧美| 国产精品va在线播放我和闺蜜| 51视频国产精品一区二区| 国产精品日韩久久久久| 一本色道久久88精品综合| 精品亚洲aⅴ在线观看| 久久精品国产免费观看| 国内精品小视频在线观看| 九九热精品视频国产| 成人黄色激情网| 国产精品视频一| 亚洲一区二区在线| 日韩hd视频在线观看| 亚洲国产高潮在线观看| 国产精品88a∨| 伊人精品在线观看| 久久久噜久噜久久综合| 91精品国产自产91精品| 欧美性生交xxxxxdddd| 亚洲aⅴ日韩av电影在线观看| 亚洲久久久久久久久久久| 国产成人在线精品| 亚洲午夜色婷婷在线| 精品久久久香蕉免费精品视频| 国产精品一区二区三区久久| 国产精品一区二区三区久久久| 国产精品久久久久久av福利| 538国产精品一区二区在线| 精品人伦一区二区三区蜜桃网站| 少妇av一区二区三区| 亚洲欧美日韩国产中文| 91性高湖久久久久久久久_久久99| 亚洲精品美女在线| 精品久久久久久中文字幕| 日本欧美爱爱爱| 亚洲成人黄色在线| 欧美一级电影免费在线观看| 亚洲第一网中文字幕| 成人免费网站在线看| 国产精品专区一| 日本久久久a级免费| 国产精品视频一区二区三区四| 91久久在线播放| 亚洲国产精品成人av| 日韩在线免费视频观看| 日韩av一区二区在线| 中文字幕亚洲综合久久筱田步美| 亚洲精品98久久久久久中文字幕| 97精品国产97久久久久久| 亚洲激情国产精品| 上原亚衣av一区二区三区| 国产日韩综合一区二区性色av| 日韩黄在线观看| 日韩一区二区三区xxxx| 日本不卡免费高清视频| 日韩精品久久久久久福利| 国产精品久久久久aaaa九色| 92福利视频午夜1000合集在线观看| 日本成人黄色片| 日韩欧美国产骚| 亚洲a在线观看| 浅井舞香一区二区| 欧美日韩亚洲精品一区二区三区| 北条麻妃一区二区三区中文字幕| 国产成人精品久久二区二区91| 97在线视频观看| 国产98色在线| 亚洲风情亚aⅴ在线发布| 狠狠躁天天躁日日躁欧美| 久久777国产线看观看精品| 国产精品久久久久久久久影视| 欧美精品videosex性欧美| 欧美日韩国产va另类| 亚洲激情在线观看视频免费| 久久精品91久久久久久再现| 97激碰免费视频| 日韩视频免费看| 一区二区三区 在线观看视| 一本色道久久综合狠狠躁篇的优点| 国产精品久久久久久av下载红粉| 欧美怡红院视频一区二区三区| 动漫精品一区二区| 国产精品久久久久久久久影视| 九九热这里只有在线精品视| 亚洲精品久久久久中文字幕欢迎你| 久久免费精品视频| 不卡av电影在线观看| 亚洲综合小说区| 国产精品视频久久久久| 欧美性猛交xxxx乱大交蜜桃| 日本久久久久久久久久久| 亚洲欧美日韩综合| 国产精品电影久久久久电影网| 黑人狂躁日本妞一区二区三区| 91高清视频免费| 久久精品国产亚洲精品2020| 国产精品视频白浆免费视频| 最近免费中文字幕视频2019| 7777免费精品视频| 欧美国产欧美亚洲国产日韩mv天天看完整| 91精品视频观看| 欧美夫妻性视频| 国产精品xxx视频|