高精度算法(加、減、乘、除、階乘和)?

?歸納編程學習的感悟,
記錄奮斗路上的點滴,
希望能幫到一樣刻苦的你!
如有不足歡迎指正!
共同學習交流!
🌎歡迎各位→點贊 👍+ 收藏? + 留言?📝
唯有主動付出,才有豐富的果實獲得收獲!

高精度乘法

#include<bits/stdc++.h>
using namespace std;
#define debug(a) cout<<a<<" "const int N=1e5+100; // 定義一個較大的數組大小,用于存儲大整數string s1,s2; // 用于輸入兩個字符串形式的大整數
int a[N],b[N],c[N],ans,ma; // a 和 b 存儲兩個大整數的每一位數字,c 存儲結果,ans 用于進位,ma 記錄較大數的位數int main()
{cin>>s1>>s2; // 輸入兩個大整數(以字符串形式)int j=1,k=1;// 將字符串 s1 的每一位數字從低位到高位存入數組 afor(int i=s1.size()-1;i>=0;i--) a[j++]=s1[i]-'0';// 將字符串 s2 的每一位數字從低位到高位存入數組 bfor(int i=s2.size()-1;i>=0;i--) b[k++]=s2[i]-'0';// 獲取兩個大整數的最大長度ma=max(s1.size(),s2.size());// 模擬豎式加法,逐位相加并處理進位for(int i=1;i<=ma;i++){ans+=a[i]+b[i]; // 當前位相加,并加上上一位的進位c[i]=ans%10; // 當前位的結果是相加后的個位數ans/=10; // 更新進位值}// 如果最高位仍有進位,則需要額外增加一位if(ans) c[++ma]=ans;// 從高位到低位輸出結果for(int i=ma;i>=1;i--)cout<<c[i];return 0;
}

高精度減法

#include<bits/stdc++.h>
using namespace std;
#define debug(a) cout<<a<<" "const int N=1e5+100; // 定義一個較大的數組大小,用于存儲大整數string s1,s2; // 用于輸入兩個字符串形式的大整數
int a[N],b[N],c[N],ma; // a 和 b 存儲兩個大整數的每一位數字,c 存儲結果,ma 記錄較大數的位數int main()
{cin>>s1>>s2; // 輸入兩個大整數(以字符串形式)// 如果 s1 小于 s2,則交換兩者,并輸出負號表示結果為負數if(s1.size()<s2.size()||(s1.size()==s2.size()&&s1<s2)){cout<<'-'; // 輸出負號swap(s1,s2); // 交換 s1 和 s2 的值,確保 s1 始終是較大的數}int j=1,k=1;// 將字符串 s1 的每一位數字從低位到高位存入數組 afor(int i=s1.size()-1;i>=0;i--) a[j++]=s1[i]-'0';// 將字符串 s2 的每一位數字從低位到高位存入數組 bfor(int i=s2.size()-1;i>=0;i--) b[k++]=s2[i]-'0';// 獲取兩個大整數的最大長度ma=max(s1.size(),s2.size());// 模擬豎式減法,逐位相減并處理借位for(int i=1;i<=ma;i++){if(a[i]-b[i]<0) // 如果當前位不夠減{a[i]+=10; // 向高位借 10a[i+1]-=1; // 高位減 1}c[i]=a[i]-b[i]; // 當前位的結果是相減后的值}// 去掉結果中的前導零while(c[ma]==0&&ma>1) ma--;// 從高位到低位輸出結果for(int i=ma;i>=1;i--)cout<<c[i];return 0;
}

高精度乘法

#include<bits/stdc++.h>
using namespace std;
#define debug(a) cout<<a<<" "const int N=1e5+100; // 定義一個較大的數組大小,用于存儲大整數string s1,s2; // 用于輸入兩個字符串形式的大整數
int a[N],b[N],s[N],c[N],ans,ma; // a 和 b 存儲兩個大整數的每一位數字,s 存儲中間結果,c 存儲最終結果,ans 用于進位,ma 記錄結果的最大可能位數int main()
{	cin>>s1>>s2; // 輸入兩個大整數(以字符串形式)int j=1,k=1;// 將字符串 s1 的每一位數字從低位到高位存入數組 afor(int i=s1.size()-1;i>=0;i--) a[j++]=s1[i]-'0';// 將字符串 s2 的每一位數字從低位到高位存入數組 bfor(int i=s2.size()-1;i>=0;i--) b[k++]=s2[i]-'0';// 計算結果的最大可能位數ma=s1.size()+s2.size()-1; // 兩個數相乘的結果最多有 s1.size() + s2.size() - 1 位// 模擬豎式乘法,逐位相乘并累加到中間結果數組 s 中for(int i=1;i<=s1.size();i++){for(int j=1;j<=s2.size();j++){s[i+j-1]+=a[i]*b[j]; // 將第 i 位和第 j 位相乘的結果累加到對應的位置}}// 處理進位,將中間結果數組 s 轉換為最終結果數組 cfor(int i=1;i<=ma;i++){ans+=s[i]; // 累加當前位的值和之前的進位c[i]=ans%10; // 當前位的結果是累加值的個位數ans/=10; // 更新進位值}// 如果最高位仍有進位,則需要額外增加一位if(ans) c[++ma]=ans;// 去掉結果中的前導零while(c[ma]==0&&ma>1) ma--;// 從高位到低位輸出結果for(int i=ma;i>=1;i--)cout<<c[i];return 0;
}

高精度除法

#include<bits/stdc++.h>
using namespace std;
#define debug(a) cout<<a<<" "const int N=1e5+10; // 定義一個較大的數組大小,用于存儲大整數string s1; // 用于輸入字符串形式的大整數
int a[N],b,c[N],ans,ma; // a 存儲大整數的每一位數字,b 是除數,c 存儲結果,ans 用于存儲當前余數,ma 記錄大整數的位數int main()
{cin>>s1>>b; // 輸入大整數(以字符串形式)和除數 bint j=1;// 將字符串 s1 的每一位數字從低位到高位存入數組 afor(int i=s1.size()-1;i>=0;i--) a[j++]=s1[i]-'0';ma=s1.size(); // 獲取大整數的位數// 模擬豎式除法,逐位計算商和余數for(int i=ma;i>=1;i--){ans=ans*10+a[i]; // 當前余數乘以 10 加上當前位的數字c[i]=ans/b; // 當前位的商是當前余數除以除數 b 的結果ans%=b; // 更新余數為當前余數對除數 b 取模的結果}// 去掉結果中的前導零while(c[ma]==0&&ma>1) ma--;// 從高位到低位輸出結果for(int i=ma;i>=1;i--)cout<<c[i];return 0;
}

高精度階乘和

#include<bits/stdc++.h>
using namespace std;
#define debug(a) cout<<a<<" "const int N=1e5+10; // 定義一個較大的數組大小,用于存儲大整數int n,a[N],b[N],ans,ma,mb; // a 存儲當前階乘的結果,b 存儲前 n 個階乘的和,ans 用于進位,ma 和 mb 分別記錄當前階乘和總和的最大位數int main()
{cin>>n; // 輸入 n,表示求前 n 個階乘的和for(int k=1;k<=n;k++) // 外層循環:求前 n 個階乘的和{a[1]=1; ma=1; // 初始化當前階乘為 1(即 1 的階乘),并設置最大位數為 1for(int i=1;i<=k;i++) // 內層循環:計算 k 的階乘{ans=0; // 初始化進位值為 0// 高精度乘法:將當前階乘結果 a 乘以 ifor(int j=1;j<=ma;j++){ans+=a[j]*i; // 當前位乘以 i 并加上之前的進位a[j]=ans%10; // 當前位的結果是累加值的個位數ans/=10; // 更新進位值}// 如果最高位仍有進位,則需要擴展位數while(ans){a[++ma]=ans%10; // 將進位值添加到新的高位ans/=10; // 繼續處理進位}}// 更新總和的最大位數mb=max(ma,mb); ans=0;// 高精度加法:將當前階乘結果 a 加到總和 b 中for(int i=1;i<=mb;i++){ans+=a[i]+b[i]; // 累加當前位和之前的進位b[i]=ans%10; // 當前位的結果是累加值的個位數ans/=10; // 更新進位值}// 如果最高位仍有進位,則需要擴展位數if(ans) b[++mb]=ans;}	// 從高位到低位輸出結果for(int i=mb;i>=1;i--)cout<<b[i];	return 0;
}

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

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

相關文章

探索大語言模型(LLM):馬爾可夫鏈——從詩歌分析到人工智能的數學工具

提出背景與靈感起源 馬爾可夫鏈由俄國數學家安德雷馬爾可夫于1906年提出&#xff0c;最初是為了挑戰當時概率論中“獨立性假設”的局限性。他希望通過研究相依變量序列&#xff0c;證明即使隨機變量之間存在依賴關系&#xff0c;大數定律和中心極限定理仍然成立。 靈感來源&am…

【web服務_負載均衡Nginx】三、Nginx 實踐應用與高級配置技巧

一、Nginx 在 Web 服務器場景中的深度應用? 1.1 靜態網站部署與優化? 在 CentOS 7 系統中&#xff0c;使用 Nginx 部署靜態網站是最基礎也最常見的應用場景。首先&#xff0c;準備網站文件&#xff0c;在/var/www/html目錄下創建index.html文件&#xff1a; sudo mkdir -p…

C語言格式化輸入輸出總結 (printf和scanf)

一、printf格式化輸出 1. 整數格式化 (%d, %i, %u, %o, %x) c復制代碼 int num 42; // 以下為不同格式輸出示例 printf("%d", num); // 42 (十進制) printf("%i", num); // 42 (同%d) printf("%u", num); // 42 (無符號十進制…

哈夫曼編碼和哈夫曼樹

哈夫曼編碼&#xff08;Huffman Coding&#xff09; 是一種基于字符出現頻率的無損數據壓縮算法&#xff0c;通過構建哈夫曼樹&#xff08;Huffman Tree&#xff09; 來生成最優前綴編碼&#xff0c;使得高頻字符用短編碼&#xff0c;低頻字符用長編碼&#xff0c;從而實現高效…

Jetson Orin NX 部署YOLOv12筆記

步驟一.創建虛擬環境 conda create -n yolov12 python3.8.20 注意&#xff1a;YOLOv12/YOLOv11/YOLOv10/YOLOv9/YOLOv8/YOLOv7a/YOLOv5 環境通用 步驟二.激活虛擬環境 conda activate yolov12 #激活環境 步驟三.查詢Jetpack出廠版本 Jetson系列平臺各型號支持的最高Jetp…

Linux指令篇 (2)

指令篇&#xff08;2&#xff09; Linux基本指令&#xff08;2&#xff09;(1) mkdir指令&#xff08;重要&#xff09;&#xff08;2&#xff09;rmdir指令&&rm指令(重要)&#xff08;3&#xff09;man指令(重要)&#xff08;4&#xff09;cp指令&#xff08;重要&…

致遠OA——自定義開發rest接口

文章目錄 :apple: 業務流程 &#x1f34e; 業務流程 代碼案例&#xff1a; https://pan.quark.cn/s/57fa808c823f 官方文檔&#xff1a; https://open.seeyoncloud.com/seeyonapi/781/https://open.seeyoncloud.com/v5devCTP/39/783.html 登錄系統 —— 后臺管理 —— 切換系…

區塊鏈如何成為智能城市的底層引擎?從數據透明到自動化治理

區塊鏈如何成為智能城市的底層引擎&#xff1f;從數據透明到自動化治理 引言&#xff1a;智能城市真的智能嗎&#xff1f; 在數字化時代&#xff0c;智能城市&#xff08;Smart City&#xff09;逐步成為各國推動城市創新的重要方向。城市管理者希望借助物聯網&#xff08;IoT…

洛谷P1177【模板】排序:十種排序算法全解(1)

扯談 之前我已經把十大排序算法全講了一遍&#xff08;具體詳見專欄C排序算法&#xff09;,今天我們來用一道簡單的題目總結實戰一下。 算法實現 一、桶排序&#xff08;Bucket Sort&#xff09; ?適用場景?&#xff1a;數據范圍已知且較小&#xff08;需根據測試數據調整…

SuperMap iClient3D for WebGL 如何加載WMTS服務

在 SuperMap iClient3D for WebGL 中加載WMTS服務時&#xff0c;參數配置很關鍵&#xff01;下面我們詳細介紹如何正確填寫參數&#xff0c;確保影像服務完美加載。 一、數據制作 對于上述視頻中的地圖制作&#xff0c;此處不做講述&#xff0c;如有需要可訪問&#xff1a;Onl…

再讀bert(Bidirectional Encoder Representations from Transformers)

再讀 BERT&#xff0c;仿佛在數字叢林中邂逅一位古老而智慧的先知。初次相見時&#xff0c;驚嘆于它以 Transformer 架構為羅盤&#xff0c;在預訓練與微調的星河中精準導航&#xff0c;打破 NLP 領域長久以來的迷霧。而如今&#xff0c;書頁間躍動的不再僅是 Attention 機制精…

從零開始 保姆級教程 Ubuntu20.04系統安裝MySQL8、服務器配置MySQL主從復制、本地navicat遠程連接服務器數據庫

從零開始&#xff1a;Ubuntu 20.04 系統安裝 MySQL 8、服務器配置 MySQL 主從復制、本地 Navicat 遠程連接服務器數據庫 初始化服務器1. 更新本地軟件包列表2. 安裝 MySQL 服務器3. 查看 MySQL 安裝版本4. 登錄 MySQL 管理終端5. 設置 root 用戶密碼&#xff08;推薦使用 nativ…

java怎么完善注冊,如果郵箱中途更換,能否判斷

解析在下面 附贈代碼 private static class CodeInfo {String code;long timestamp;CodeInfo(String code, long timestamp) {this.code code;this.timestamp timestamp;}}// 存儲驗證碼&#xff08;郵箱 -> 驗證碼信息&#xff09;(保證線程安全) 以免中途更改郵箱pri…

n8n 中文系列教程_01. 簡單易懂的現代AI魔法,n8n的快速了解與概念科普(文末有彩蛋)

1. 教程簡介 歡迎來到“無代碼工具探索”課程&#xff0c;這是專為非技術人員設計的指南&#xff08;當然&#xff0c;技術人員也可以從中受益&#xff09;。我們的目標是通過無代碼工具來提升工作效率&#xff0c;尤其是利用像 n8n 這樣的靈活數據庫平臺。這些工具被譽為“現…

解碼 Web Service:從技術原理到應用場景的深度剖析

Web Service 是一種基于網絡的、分布式的計算技術&#xff0c;它允許不同的應用程序之間通過網絡進行通信和交互。以下是關于 Web Service 的詳細介紹&#xff1a; 一、定義與概念 Web Service 是一種可以通過 Web 協議&#xff08;如 HTTP&#xff09;進行訪問的軟件組件&am…

Nacos啟動報錯

Nacos啟動是在單機模式下&#xff0c;不是集群模式 點擊startup.cmd啟動會報錯 打開bin目錄 rem是注釋的意思&#xff0c;在nacos1.3.2之后&#xff0c;nacos默認的都是集群模式&#xff0c;我們這里單機測試就是用單機模式。 也可以修改MODE&#xff0c;如果選擇不修改&…

uniapp-商城-26-vuex 使用流程

為了能在所有的頁面都實現狀態管理&#xff0c;我們按照前面講的頁面進行狀態獲取&#xff0c;然后再進行頁面設置和布局&#xff0c;那就是重復工作&#xff0c;vuex 就會解決這樣的問題&#xff0c;如同類、高度提煉的接口來幫助我們實現這些重復工作的管理。避免一直在造一樣…

Git 命令速查手冊

聽說用美圖可以釣讀者&#xff1f; 一、基礎操作核心命令 1. 倉庫初始化與克隆 命令作用示例git init創建新倉庫git init my-projectgit clone克隆遠程倉庫git clone [https://github.com/user/repo.git](https://github.com/user/repo.git)git remote add關聯遠程倉庫git re…

信息量、香農熵、交叉熵、KL散度總結

信息量 對于一個事件而言&#xff0c;它一般具有三個特征&#xff1a; 小概率事件往往具有較大的信息量 大概率事件往往具有較小的信息量 獨立事件的信息量相互可以相加 比如我們在買彩票這個事件中&#xff0c;彩票未中獎的概率往往很高&#xff0c;對我們而言一點也不稀…

使用C語言的cJSON中給JSON字符串添加轉義

在 cJSON 庫中&#xff0c;沒有直接提供 一個函數來專門給 JSON 字符串添加轉義&#xff08;如將 " 轉義為 \"&#xff0c;\n 轉義為 \\n 等&#xff09;。 但 cJSON 在 序列化&#xff08;cJSON_Print 或 cJSON_PrintUnformatted&#xff09; 時會自動處理轉義字符…