高精度模板

加法

P1601 A+B Problem(高精)

#include<iostream>using namespace std;
const int N = 1e6 + 10; 
int a[N],b[N],c[N];
int len1,len2,lenMax; //長度要提前定義在全局,在函數中要使用 void add(int c[],int a[],int b[])
{for(int i=0;i<lenMax;i++){c[i] += a[i] + b[i]; //這里一定是+= ,因為要加上 上一位 給的進位值 c[i + 1] = c[i] / 10; //先處理進位,給下一個位置c[i] %= 10; //再取模存入c[i] }//處理整體進位后結果長度要+1if(c[lenMax]) lenMax++; 
}int main()
{string s1,s2;cin >> s1 >> s2;len1 = s1.length(), len2 = s2.length();lenMax = max(len1,len2);for(int i=0;i<len1;i++) a[i] = s1[len1-1-i] - '0';for(int i=0;i<len2;i++) b[i] = s2[len2-1-i] - '0';add(c,a,b); //a數組、b數組相加的結果放在c數組 for(int i=lenMax-1;i>=0;i--) cout << c[i]; return 0;
}

減法

P2142 高精度減法

#include<iostream>using namespace std;
const int N = 1e6 + 10; 
int a[N],b[N],c[N];
int la,lb,lc;bool cmp(string& x,string& y) //如果第一個參數小就返回true 
{if(x.size() != y.size()){return x.size() < y.size();}else{return x < y;}
}void sub(int c[],int a[],int b[])
{for(int i=0;i<lc;i++){c[i] += a[i] - b[i];if(c[i] < 0){c[i + 1] -= 1; //c[i+1] = -1;c[i] += 10;}}while(lc > 1 && c[lc-1] == 0 ) lc--; //lc最多減到1
}int main()
{string x,y;cin >> x >> y;if(cmp(x,y))  {swap(x,y); //確保x比y大,因為等會要用大數減小數cout << "-"; //交換了說明題目給的是大數減小數,結果為負數 }la = x.length(); lb = y.length(); lc = max(la,lb);//轉化成數組形式 注意減去字符'0' for(int i=0;i<la;i++) a[i] = x[la-1-i] - '0';for(int i=0;i<lb;i++) b[i] = y[lb-1-i] - '0';//執行減法 sub(c,a,b); //輸出c數組結果for(int i=lc-1;i>=0;i--) cout << c[i]; return 0;
} 

注意:在消除前導0的時候 while(lc > 1 && c[lc-1] == 0 ) lc--; 該語句中的while不能改為if,雖然我們知道減法頂多會讓較大的那個數字減少一位,所以可能就想這條語句頂多執行一次,但是如果這被減數和減數相等,那么減完的結果全部是0,這個時候必須要用while循環去除所有的0

乘法

P1303 A*B Problem

#include <iostream>
using namespace std;const int N = 1e6 + 10;
int a[N],b[N],c[N];
int la,lb,lc;void mul(int c[],int a[],int b[])
{//兩層循環模擬列豎式相乘的過程 i和j位置的數相乘結果存在c數組的i+j位置for(int i=0;i<la;i++){for(int j=0;j<lb;j++){c[i+j] += a[i] * b[j]; //無進位乘法,最后處理進位	} }//處理進位 for(int i=0;i<lc;i++){c[i+1] += c[i] / 10; c[i] %= 10;}//處理前導零while(lc > 1 && c[lc-1] == 0) lc--; 
}int main() 
{string x,y;cin >> x >> y;la = x.size(); lb = y.size(); lc = la + lb; //相乘的結果的最大長度是兩個因數的長度和 for(int i=0;i<la;i++) a[i] = x[la-1-i] - '0';for(int i=0;i<lb;i++) b[i] = y[lb-1-i] - '0';mul(c,a,b);for(int i=lc-1;i>=0;i--) cout << c[i];	return 0;
}

除法

P1480 A/B Problem

#include<iostream>
using namespace std;const int N = 1e6 + 10;int a[N],b,c[N];
int la,lc;typedef long long LL; //t有可能超intvoid div(int c[],int a[],int b)
{LL t = 0; //用來存每一位除完的余數for(int i = la - 1;i >= 0;i--) //從最高位開始處理,所以從la-1開始遍歷{t = t * 10 + a[i];c[i] = t / b;t %= b; }while(lc > 1 && c[lc - 1] == 0) lc--; 
}int main()
{string x;cin >> x >> b;la = x.size(); lc = la; //結果和被除數的長度是相同的,只不過結果可能出現前導0,最后處理for(int i = 0;i < la;i++) a[i] = x[la - i - 1] - '0';div(c,a,b);for(int i = lc - 1;i >= 0;i--) cout << c[i];return 0;
}

Q:為什么a要從高位開始處理還要倒著存?
A:方便記憶模板,四種高精度都是倒著存,而且方便處理前導0,處理的方式與其他的高精度都一樣。但是正著存就要從數組的左邊開始處理前導0,而且輸出結果的時候還需要確定范圍。

這是a正著存的模版:

#include<iostream>
using namespace std;const int N = 1e6 + 10;int a[N], b, c[N];
int la, lc;typedef long long LL; void div(int c[], int a[], int b)
{LL t = 0; // 用來存每一位除完的余數for(int i = 0; i < la; i++)  // 這里應該是i++,不是i--{t = t * 10 + a[i];c[i] = t / b;t %= b; }// 處理前導零int k = 0;while(k < la && c[k] == 0) k++;  // 找到第一個非零位lc = la - k;// 將結果前移for(int i = 0; i < lc; i++)c[i] = c[i + k];
}int main()
{string x;cin >> x >> b;la = x.size();for(int i = 0; i < la; i++) a[i] = x[i] - '0';div(c, a, b);// 輸出結果for(int i = 0; i < lc; i++) cout << c[i];if(lc == 0) cout << "0";  // 處理結果為0的情況return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/87116.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/87116.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/87116.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

monorepo使用指北

| ?WARN? node_modules is present. Lockfile only installation will make it out-of-date ?ERR_PNPM_FETCH_404? GET https://registry.npmjs.org/common%2Fcommon: Not Found - 404 This error happened while installing a direct dependency of G:\monorepo\vue3 comm…

Java八股文——Spring「MyBatis篇」

與傳統的JDBC相比&#xff0c;MyBatis的優點&#xff1f; 面試官您好&#xff0c;MyBatis相比于傳統的JDBC&#xff0c;它并不是要完全顛覆JDBC&#xff0c;而是作為JDBC的一個強大的“增強框架”。它的核心價值在于&#xff0c;在保留了SQL最大靈活性的前提下&#xff0c;極大…

JavaScript基礎-常用的鼠標事件

一、前言 在前端開發中&#xff0c;鼠標事件 是實現用戶交互的重要手段之一。通過監聽用戶的點擊、移動、懸停等操作&#xff0c;我們可以構建出豐富而靈活的網頁交互體驗。 本文將帶你深入了解&#xff1a; JavaScript 中常見的鼠標事件&#xff1b;各類鼠標事件的觸發時機…

windows錄頻軟件

一.很反感有些做軟件的&#xff0c;把別人開源的改個界面收費&#xff0c;所以我找了一個開源免費的。 二.準備工具 一臺電腦&#xff0c; Captura:完全開源免費的錄頻軟件。 ffmpeg&#xff1a;音頻格式轉換軟件&#xff0c;這可是非常大名鼎鼎的工具。 三.安裝Captura 網址…

python中的模塊化編程:日期模塊、math算術模塊、random模塊

內置模塊&#xff08;math、random、時間&#xff09;自定義模塊&#xff08;自己寫的部分代碼&#xff09;第三方模塊&#xff08;引入的第三方代碼庫的模塊&#xff09; math模塊 import math#圓周率 print(math.pi) #自然常數 print(math.e) #圓周率的二倍 print(math.tau…

【學習筆記】Langchain基礎(二)

前文&#xff1a;【學習筆記】Langchain基礎 文章目錄 8 [LangGraph] 實現 Building Effective Agents&#xff0c;各種 workflows 及 AgentAugmented LLMPrompt ChainingParallelizationRoutingOrchestrator-Worker (協調器-工作器)Evaluator-optimizer (Actor-Critic)Agent 8…

Java大模型開發入門 (9/15):連接外部世界(中) - 向量嵌入與向量數據庫

前言 在上一篇文章中&#xff0c;我們成功地將一篇長文檔加載并分割成了一系列小的文本片段&#xff08;TextSegment&#xff09;。我們現在有了一堆“知識碎片”&#xff0c;但面臨一個新問題&#xff1a;計算機如何理解這些碎片的內容&#xff0c;并找出與用戶問題最相關的片…

Windows下MySQL安裝全流程圖文教程及客戶端使用指南(付整合安裝包)

本教程是基于5.7版本安裝&#xff0c;5.7和8.0的安裝過程大差不差 安裝包「windows上mysql中安裝包資源」 鏈接&#xff1a;https://pan.quark.cn/s/de275899936d 一、安裝前的準備 1.1 獲取 MySQL 安裝程序 官網 前往 MySQL 官方下載頁面&#xff0c;下載適用于 Windows 系…

筆記 軟件工程復習

第一章 軟件工程學概述 1.1 軟件危機&#xff08;Software Crisis&#xff09; 概念 定義&#xff1a;軟件危機指在計算機軟件開發與維護過程中遇到的一系列嚴重問題&#xff0c;源于1960年代軟件復雜度激增與傳統開發方法失效的矛盾。 本質&#xff1a;軟件規模擴大 → 開…

GaussDB創建數據庫存儲

示例一&#xff1a; 下面是一個簡單的GaussDB存儲過程示例&#xff1a; –創建一個存儲過程。 CREATE OR REPLACE PROCEDURE prc_add (param1 IN INTEGER,param2 IN OUT INTEGER ) AS BEGINparam2: param1 param2;dbe_output.print_line(result is: ||to_char(param…

基于51單片機的校園打鈴及燈控制系統

目錄 具體實現功能 設計介紹 資料內容 全部內容 資料獲取 具體實現功能 具體功能&#xff1a; &#xff08;1&#xff09;實時顯示當前時間&#xff08;年月日時分秒星期&#xff09;&#xff0c;LED模式指示燈亮。 &#xff08;2&#xff09;按下“打鈴”和“打鈴-”按鍵…

PHP+mysql雪里開輕量級報修系統 V1.0Beta

# PHP雪里開輕量級報修系統 V1.0Beta ## 簡介 這是一個基于PHP7和MySQL5.6的簡易報修系統&#xff0c;適用于學校、企業等機構的設備報修管理。 系統支持學生提交報修、后勤處理報修以及系統管理員管理用戶和報修記錄。 初代版本V1.0&#xff0c;尚未實際業務驗證&#xff0c;…

XCTF-misc-base64÷4

拿到一串字符串 666C61677B45333342374644384133423834314341393639394544444241323442363041417D轉換為字符串得到flag

Mini DeepSeek-v3訓練腳本學習

Mini DeepSeek-v3 訓練腳本詳細技術說明(腳本在文章最后) &#x1f4cb; 概述 這是一個實現了Mini DeepSeek-v3大語言模型的訓練腳本&#xff0c;集成了多項先進的深度學習技術。該腳本支持自動GPU選擇和分布式訓練&#xff0c;適合在多GPU環境下訓練Transformer模型。 &…

FPGA 的硬件結構

FPGA 的基本結構分為5 部分&#xff1a;可編程邏輯塊&#xff08;CLB&#xff09;、輸入/輸出塊&#xff08;IOB&#xff09;、邏輯塊之間的布線資源、內嵌RAM 和內嵌的功能單元。 &#xff08;1&#xff09;可編程邏輯塊&#xff08;CLB&#xff09; 一個基本的可編程邏輯塊由…

算法專題八: 鏈表

1.兩數相加 題目鏈接&#xff1a;2. 兩數相加 - 力扣&#xff08;LeetCode&#xff09; /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode…

5G+邊緣計算推動下的商品詳情API低延遲高效率新方案

在電商行業&#xff0c;商品詳情API的性能直接關系到用戶體驗與平臺競爭力。傳統云計算模式在處理高并發請求時&#xff0c;常面臨網絡延遲高、帶寬成本大等問題。而5G與邊緣計算的結合&#xff0c;為商品詳情API的低延遲高效率提供了新方案。本文將深入探討這一新方案&#xf…

【Python教程】CentOS系統下Miniconda3安裝與Python項目后臺運行全攻略

一、引言 為了在CentOS系統上高效地開發和運行Python項目&#xff0c;我們常常需要借助Miniconda3來管理Python環境。本文將詳細介紹如何在CentOS系統上安裝Miniconda3&#xff0c;并將Python項目部署到后臺運行。 二、Miniconda3和CentOS系統介紹 Miniconda3介紹 Minicond…

【讀點論文】A Survey on Open-Set Image Recognition

A Survey on Open-Set Image Recognition Abstract 開集圖像識別(Open-set image recognition&#xff0c;OSR)旨在對測試集中已知類別的樣本進行分類&#xff0c;并識別未知類別的樣本&#xff0c;在許多實際應用中支持魯棒的分類器&#xff0c;如自動駕駛、醫療診斷、安全監…

使用DuckDB查詢DeepSeek歷史對話

DeepSeek網頁版在左下角個人信息/系統設置的賬號管理頁簽中有個“導出所有歷史對話”功能&#xff0c;點擊“導出”&#xff0c;片刻就能生成一個deepseek_data-2025-06-14.zip的文件&#xff0c;里面有2個json文件&#xff0c;直接用文本編輯器查看不太方便。 而用DuckDB查詢卻…