高精度HighAccuracy_acwing.cpp

来源:https://www.cnblogs.com/--OvO--/archive/2022/10/29/16838921.html
-Advertisement-
Play Games

​​ ​ 文章: 力扣模板:字元串相加 - 字元串相加 - 力扣(LeetCode) acwing模板:常用代碼模板1——基礎演算法 - AcWing 例題: P1009 [NOIP1998 普及組] 階乘之和 - 洛谷 | 電腦科學教育新生態 (luogu.com.cn) 筆記:HighAccur ...


 文章:

        力扣模板:字元串相加 - 字元串相加 - 力扣(LeetCode)

        acwing模板:常用代碼模板1——基礎演算法 - AcWing

 

例題:

        P1009 [NOIP1998 普及組] 階乘之和 - 洛谷 | 電腦科學教育新生態 (luogu.com.cn)

 

筆記:HighAccuracy_acwing.cpp

        說明:參考acwing的模板,但是和acwing模板不完全相同

#include<bits/stdc++.h>
using namespace std;

//HighAccuracy_acwing.cpp

/*
說明:
參考acwing的模板:https://www.acwing.com/blog/content/277/
但是和acwing模板不完全相同
*/

// C = A + B, A >= 0, B >= 0
//這裡不加&,就可以避免改變了原來的a,b數組,使得a,b數組可以重覆利用
vector<int> add(vector<int> A, vector<int> B){  //正序輸入兩個vector類型的“數”
    if (A.size() < B.size()) return add(B, A);  //使得A數組是最大的
    //如果未反轉,在if下麵加reverse,不能在if上面加reverse,否者二次反轉,等於沒有反轉
    
    reverse(A.begin(),A.end());  //反轉數組,變成個十百千萬···
    reverse(B.begin(),B.end());
    vector<int> C;  //初始化答案數組
    int t = 0;
    for (int i = 0; i < A.size(); i ++ ){
        t += A[i];
        if (i < B.size()) t += B[i];  //如果B還有數字
        C.push_back(t % 10);
        t /= 10;
    }
    if (t) C.push_back(t);//最後一次加法可能還有進位的數,把最高位補上
    return C;
}

string add(string a, string b){
    if(a.size()<b.size()) return add(b,a);
    reverse(a.begin(),a.end());
    reverse(b.begin(),b.end());
    int t = 0;
    string c;
    for(int i = 0; i<a.size(); i++){
        t += a[i] - '0';
        if(i<b.size()) t+=b[i] - '0';
        c.push_back(t%10 + '0');
        t /= 10;
    }
    if(t) c.push_back(t + '0');
    reverse(c.begin(), c.end());
    return c;
}

// C = A - B, 滿足A >= B, A >= 0, B >= 0
vector<int> sub(vector<int> A, vector<int> B){
    vector<int> C;
    for (int i = 0, t = 0; i < A.size(); i ++ )    {
        t = A[i] - t;
        if (i < B.size()) t -= B[i];
        C.push_back((t + 10) % 10);
        if (t < 0) t = 1;
        else t = 0;
    }
    while (C.size() > 1 && C.back() == 0) C.pop_back();
    return C;
}

/*高精度乘低精度 —— 模板題*/
// C = A * b, A >= 0, b >= 0
vector<int> mul(vector<int> A, int b){  //輸入正序的高精度A和低精度b
    vector<int> C;  //初始化答案數組
    reverse(A.begin(),A.end());  //反轉數組,變成個十百千萬···
    int t = 0;
    for (int i = 0; i < A.size() || t; i++ ){  //A數組還有數 或 t還有數
        if (i < A.size()) t += A[i] * b;  //如果 A數組還有數
        C.push_back(t % 10);
        t /= 10;
    }
    while (C.size() > 1 && C.back() == 0) C.pop_back();  //末尾可能是0,都要去掉(我感覺是多餘的,不可能有這種情況)(難道是處理b==0?)
    reverse(C.begin(),C.end());  //反轉數組,恢復正序
    return C;
}

string mul(string a, int b){
    reverse(a.begin(), a.end());
    string c;
    int t = 0;
    for(int i = 0; i<a.size() || t; i++){
        if(i<a.size()) t += (a[i] - '0') * b;
        c.push_back(t%10 + '0');
        t /= 10;
    }
    while(c.size()>1 && c.back() == 0)c.pop_back();
    reverse(c.begin(), c.end());
    return c;
}

int main(){
    //加法
    vector<int> addint1 = {1,2,3,4,5,6,7,8,9};
    vector<int> addint2 = {9,8,7,6,5,4,3,2,1,0};
    vector<int> addint3 = add(addint1,addint2);
    for(int i = 0;i<addint3.size(); i++) cout<<addint3[i];
    printf("\n");

    //加法
    string addstr1 = {"123456789"};
    string addstr2 = {"9876543210"};
    string addstr3 = add(addstr1,addstr2);
    cout<< addstr3 <<endl;

    //乘法
    vector<int> mulint1 = {1,2,3,4,5,6,7,8,9};
    int mulint2 = 100000;
    vector<int> mulint3 = mul(mulint1,mulint2);
    for(int i = 0;i<mulint3.size(); i++) cout<<mulint3[i];
    printf("\n");

    //乘法
    string mulstr1 = "123456789";
    int mulstr2 = 100000;
    cout<<mul(mulstr1,mulstr2)<<endl;

    return 0;
}

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 同源策略介紹 同源策略(Same origin policy)是一種約定,它是瀏覽器最核心也最基本的安全功能,如果缺少了同源策略,則瀏覽器的正常功能可能都會受到影響。可以說Web是構建在同源策略基礎之上的,瀏覽器只是針對同源策略的一種實現 請求的url地址,必須與瀏覽器上的url地址處於同域上,也就 ...
  • 2022-10-29 Servlet 1、 Servlet的作用: 例如:查詢數據 (1)瀏覽器端點擊某個查詢功能,向伺服器端發出請求;伺服器端解析請求,創建Servlet對象,並調用特定方法;Servlet對象調用“DAO”方法獲取數據;DAO方法查詢資料庫。 (2)之後將後端的處理數據傳遞給“前 ...
  • 各位好啊,我是會編程的蝸牛,作為java開發者,對於各類java開發技術、開發框架肯定是多少都要瞭解和知道的。 但是作為已經發展了幾十年的java開發生態,各類技術層出不窮,有的新技術新框架已經對舊技術舊框架產生了顛覆性的影響,當然還有一些舊技術壓根就沒流行過。今天我們來看下Java那些可以放棄的技... ...
  • CSS 1.css介紹 css指的是層疊樣式表(cascading style sheets) 官方文檔:https://www.w3school.com.cn/css/index.asp 為什麼需要css? 在沒有css之前,我們想要修改html元素的樣式需要為每個html元素單獨定義樣式屬性,費 ...
  • 原文鏈接:https://www.zhoubotong.site/post/86.html 這裡介紹下介面interface嵌套的用法,大家知道Go語言中不僅僅結構體與結構體之間可以嵌套,介面與介面之間也可以嵌套,通過介面的嵌套我們可以定義出新的介面。 Golang 的介面嵌套,其實也就是一個介面里 ...
  • Dff 這一節終於開始時序電路了。首先是一個用的最多的D觸發器。 module top_module ( input clk, // Clocks are used in sequential circuits input d, output reg q );// // Use a clocked ...
  • 2022-10-29 1、Http含義: 超文本傳輸協議,它是一種詳細規定了瀏覽器與萬維網的相互通信的協議。例如:規定了傳輸數據的格式。 2、兩種傳輸傳輸數據的格式: (1)請求報文:客戶端向伺服器發送數據。報文:就是傳輸中有特定數據格式的數據的總稱。 (2)響應報文:伺服器向客戶端發送數據。 3、 ...
  • 人生苦短,我用Python 人之初,喜白嫖。大家都喜歡白嫖,我也喜歡,那麼今天就來試試怎麼白嫖抑雲~ 我不是,我沒有,別瞎說~ 一、你需要準備 1、環境 Python3.6以上 pycharm2019以上 2、模塊 requests # 發送請求模塊 第三方模塊 exec js # 調用JS的模塊 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...