算法打卡 day4

4 . 高精度算法

性質:數組或者容器從低位往高位依次存儲大整數,方便進位。

4.1 高精度加法

給定兩個正整數(不含前導 0),計算它們的和。

輸入格式

共兩行,每行包含一個整數。

輸出格式

共一行,包含所求的和。

數據范圍

1≤整數長度≤100000

輸入樣例:

12

23

輸出樣例:

35

思路:

模擬人工加法。

//高精度 加法#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<vector>
using namespace std;vector<int> sum(vector<int> &A,vector<int> &B)
{vector<int> C;int k = 0;for(int i = 0;i < max(A.size(),B.size());i++){if(i<A.size()) k+=A[i];if(i<B.size()) k+=B[i]; C.push_back(k%10);k/=10;}if(k) C.push_back(1);return C;} int main(){string a,b;vector<int> A,B;cin>>a>>b;for(int i = a.size()-1;i>=0;i--) A.push_back(a[i]-'0');for(int i = b.size()-1;i>=0;i--) B.push_back(a[i]-'0');vector<int> C=sum(A,B);for(int i=C.size()-1;i>=0;i--) cout<<C[i];return 0;}
4.2 高精度減法

給定兩個正整數(不含前導 0),計算它們的差,計算結果可能為負數。

輸入格式

共兩行,每行包含一個整數。

輸出格式

共一行,包含所求的差。

數據范圍

1≤整數長度≤105

輸入樣例:

32

11

輸出樣例:

21

思路:

模擬人工減法。

#include <bits/stdc++.h>
using namespace std;vector<int> A,B;bool cmp(vector<int> &A,vector<int> &B){if(A.size()!=B.size()) return A.size()>B.size();else{for(int i=A.size()-1;i>=0;i--){if(A[i]!=B[i]) return A[i]>B[i];}}return 1;
}vector<int> sub(vector<int> &A,vector<int> &B){int k=0;//表示上一位在這一位借走的位數vector<int> C;for(int i=0;i<A.size();i++){int t=A[i]-k;if(i<B.size()) t-=B[i];if(t<0) t+=10,k=1;else k=0;C.push_back(t%10);}while(C.size()>1&&C.back()==0) C.pop_back();return C;
}int main(){string a,b;cin>>a>>b;for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');for(int i=b.size()-1;i>=0;i--) B.push_back(b[i]-'0');vector<int> C;if(cmp(A,B)) C=sub(A,B);  //當A>=B時,答案為0或正值else C=sub(B,A),cout<<"-";  //當A<B時,答案為負值for(int i=C.size()-1;i>=0;i--) cout<<C[i];return 0;
}
4.3 高精度乘法

給定兩個非負整數(不含前導 0)A 和 B,請你計算 A×B 的值。

輸入格式

共兩行,第一行包含整數 A,第二行包含整數 B。

輸出格式

共一行,包含 A×B 的值。

數據范圍

1≤A的長度≤100000,

0≤B≤10000

輸入樣例:

2

3

輸出樣例:

6

高精度x低精度

高精度x高精度

//高精度x低精度
#include<bits/stdc++.h>
#include<vector>using namespace std;vector<int> mul(vector<int> &A,int b)
{vector<int> C;int t=0;for(int i=0;i<A.size();i++){t+=A[i]*b;C.push_back(t%10);t/=10;}while(t){C.push_back(t%10);t/=10;}while(C.size()>1&&C.back()==0) C.pop_back();return C;
}
int main()
{string a;int b;cin>>a>>b;vector<int> A;for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');auto C=mul(A,b);for(int i=C.size()-1;i>=0;i--) cout<<C[i];return 0;
}
//高精度 x 高精度
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
const int N = 1e5+10;int A[N],B[N],C[N];
int la,lb,lc;void mul(int A[],int B[],int C[])
{for(int i=0;i<la;i++)for(int j=0;j<lb;j++){C[i+j]+=A[i]*B[j];C[i+j+1]+=C[i+j]/10;C[i+j]%=10;}while(lc&&C[lc]==0) lc--;
}int main()
{string a,b;cin>>a>>b;la=a.size();lb=b.size();lc=la+lb+10;for(int i=a.size()-1;i>=0;i--) A[la-i-1]=a[i]-'0';for(int i=b.size()-1;i>=0;i--) B[lb-i-1]=b[i]-'0';mul(A,B,C);for(int i=lc;i>=0;i--) cout<<C[i];return 0;
}
4.4 高精度除法

給定兩個非負整數(不含前導 0)A,B,請你計算 A/B的商和余數。

輸入格式

共兩行,第一行包含整數 A,第二行包含整數 B。

輸出格式

共兩行,第一行輸出所求的商,第二行輸出所求余數。

數據范圍

1≤A的長度≤100000,

1≤B≤10000,

B 一定不為 00

輸入樣例:

7

2

輸出樣例:

3

1


#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
vector<int> div(vector<int> &A,int B,int &r)
{vector<int> C;for(int i=0;i<A.size();i++){r=r*10+A[i];C.push_back(r/B);r%=B;}reverse(C.begin(),C.end());while(C.size()>1&&C.back()==0) C.pop_back();return C;
}
int main()
{string a;int B,r=0;cin>>a>>B;vector<int> A;for(int i=0;i<a.size();i++) A.push_back(a[i]-'0');auto C=div(A,B,r);for(int i=C.size()-1;i>=0;i--) cout<<C[i];cout<<endl<<r;// 輸出余數return 0;
}
4.5 高精度階乘

問題描述

  輸入一個正整數n,輸出n!的值。

  其中n!=1*2*3*…*n

算法描述

  n!可能很大,而計算機能表示的整數范圍有限,需要使用高精度計算的方法。使用一個數組A來表示一個大整數aA[0]表示a的個位,A[1]表示a的十位,依次類推。

  將a乘以一個整數k變為將數組A的每一個元素都乘以k,請注意處理相應的進位。

  首先將a設為1,然后乘2,乘3,當乘到n時,即得到了n!的值。

輸入格式

  輸入包含一個正整數nn<=1000。

輸出格式

  輸出n!的準確值。

樣例輸入

10

樣例輸出

3628800

#include<iostream>
#include<algorithm>
#include<cstring>using namespace std;
const int N=1e5+10;
int n;
int a[N];int main()
{scanf("%d",&n);a[1]=1;int t=0;for(int i=2;i<=n;i++){for(int j=1;j<=10000;j++){int p=a[j]*i+t;a[j]=p%10;t=p/10;}}n=10000;while(a[n]==0) n--;for(int i=n;i>=1;i--) cout<<a[i];return 0;
}

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

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

相關文章

【筆記】Docker 配置阿里云鏡像加速(公共地址即開即用,無需手動創建實例)

2025年06月25日記 【好用但慎用】Windows 系統中將所有 WSL 發行版從 C 盤遷移到 非系統 盤的完整筆記&#xff08;附 異常處理&#xff09;-CSDN博客 【筆記】解決 WSL 遷移后 Docker 出現 “starting services: initializing Docker API Proxy: setting up docker ap” 問題…

day35-Django(1)

day35-Django 3.2 前言 之前我們介紹過web應用程序和http協議,簡單了解過web開發的概念。Web應用程序的本質 接收并解析HTTP請求,獲取具體的請求信息處理本次HTTP請求,即完成本次請求的業務邏輯處理構造并返回處理結果——HTTP響應import socketserver = socket.socket() …

PostgreSQL全棧部署指南:從零構建企業級高可用數據庫集群

PostgreSQL全棧部署指南:從零構建企業級數據庫集群 前言: 本文詳解了**PostgreSQL**所有的部署方式,如 yum 安裝、源碼編譯安裝、RPM包手動安裝,以及如何選擇適合的安裝方式。適合不同的場景應用。通過高可用部署詳細了解安裝思路及過程,包括內網環境下的配置、主節點的創…

MQTT 和 HTTP 有什么本質區別?

MQTT 和 HTTP 的本質區別在于它們設計的初衷和核心工作模式完全不同。它們是為解決不同問題而創造的兩種工具。 簡單來說&#xff1a; HTTP 就像是去圖書館問問題&#xff1a;你&#xff08;客戶端&#xff09;主動去找圖書管理員&#xff08;服務器&#xff09;&#xff0c;…

GtkSharp跨平臺WinForm實現

文章目錄 跨平臺架構設計跨平臺項目配置GtkSharp串口通訊實現跨平臺部署配置Linux系統配置macOS系統配置 相關學習資源GTK#跨平臺開發跨平臺.NET開發Linux開發環境macOS開發環境跨平臺UI框架對比容器化部署開源項目參考性能優化與調試 跨平臺架構設計 基于GTKSystem.Windows.F…

【閑談】對于c++未來的看法

對于C未來看法 C 作為一門誕生于上世紀的編程語言&#xff0c;在軟件工業發展史上扮演了不可替代的角色。盡管近年來諸如 Rust、Go、Swift、Kotlin 等現代語言相繼崛起&#xff0c;C 依然在系統軟件、高性能服務、嵌入式等關鍵領域中發揮著主力作用。本文將從 C 的當前應用前景…

【論文】云原生事件驅動架構在智能風控系統中的實踐與思考

摘要 2023年6月至2024年3月,我作為某頭部證券公司新一代極速交易系統的首席架構師,主導設計并落地了基于云原生事件驅動架構的全新交易風控平臺。該項目旨在攻克原有系統無法支撐峰值20萬筆/秒交易量、風控延遲超過3秒以及行情劇烈波動時系統崩潰等核心痛點。通過構建以Kube…

opensbi從0到1入門學習

最近要在RV64的平臺上把Linux給bringup起來&#xff0c;由于當下的工作主要集中在底層硬件接口驅動、CPU的操作及RTOS應用等&#xff0c;雖然之前搞過Arm Linux的開發工作&#xff0c;但是比較基礎的玩的比較少&#xff0c;所以真正要搞把系統bringup起來&#xff0c;我之前的知…

Python打卡:Day36

復習日 浙大疏錦行

開發過程中的時空權衡:如何優雅地平衡時間與空間效率

文章目錄 恒的開發者困境一、理解時間與空間的基本概念1. 時間復雜度2. 空間復雜度 二、時空權衡的基本原則1. 硬件環境決定優先級2. 應用場景決定策略3. 數據規模的影響 三、實際開發中的權衡策略1. 緩存為王&#xff1a;用空間換時間2. 壓縮數據&#xff1a;用時間換空間3. 預…

RAG 應用實戰指南:從商業目標到系統落地與運營 E2E 實踐

專欄入口 前言 在當今信息爆炸的時代&#xff0c;如何高效地從海量數據中提取有用信息并提供智能問答服務&#xff0c;成為眾多企業關注的焦點。檢索增強生成&#xff08;Retrieval-Augmented Generation, RAG&#xff09;技術以其結合了檢索模型的精準性和生成模型的靈活性&a…

關于晨脈的概念解釋

晨脈&#xff08;Resting Morning Pulse&#xff09;是指??人體在清晨清醒后、未進行任何活動前??&#xff0c;于臥床狀態下測量的每分鐘脈搏或心率次數。它反映了人體在無運動消耗、無神經干擾時的基礎代謝狀態&#xff0c;是評估心臟功能、身體恢復情況及運動適應性的重要…

自然語言處理入門

一、概念 自然語言處理&#xff08;Natural Language Processing, 簡稱NLP&#xff09;是計算機科學與語言中關注于計算機與人類語言間轉換的領域。 二、發展史 2012年&#xff1a;深度學習的崛起 Word2Vec的提出&#xff08;Mikolov等&#xff0c;2013年正式發表&#xff0c…

【算法 day12】LeetCode 226.翻轉二叉樹 |101. 對稱二叉樹 |104.二叉樹的最大深度|111.二叉樹的最小深度

226.翻轉二叉樹 &#xff08;前序&#xff0c;后序&#xff09; 題目鏈接 | 文檔講解 |視頻講解 : 鏈接 1.思路&#xff1a; 翻轉的是指針&#xff0c;不是數值 前序遍歷和后序遍歷都可以 中序不行&#xff0c;中序遍歷的順序是左中右,反轉左指針后,到根節點&#xff0c;…

Spring Boot 整合 Swagger3 如何生成接口文檔?

前后端分離的項目&#xff0c;接口文檔的存在十分重要。與手動編寫接口文檔不同&#xff0c;swagger是一個自動生成接口文檔的工具&#xff0c;在需求不斷變更的環境下&#xff0c;手動編寫文檔的效率實在太低。與新版的swagger3相比swagger2配置更少&#xff0c;使用更加方便。…

Rust 的智能指針

在 Rust 中&#xff0c;智能指針是一種特殊的數據結構&#xff0c;它不僅存儲數據的地址&#xff0c;還提供了額外的功能&#xff0c;如自動內存管理、引用計數等。智能指針在 Rust 中非常重要&#xff0c;因為它們幫助開發者管理內存&#xff0c;同時保持代碼的安全性和效率。…

Redis RDB 持久化:原理、觸發方式與優缺點全解析

引言 作為 Redis 最經典的持久化機制之一&#xff0c;RDB&#xff08;Redis DataBase&#xff09;憑借高效的快照生成能力和快速的恢復速度&#xff0c;一直是開發者的心頭好。但很多人對它的底層原理、觸發時機和適用場景仍存在疑惑。今天咱們就對RDB進行全解析&#xff0c;幫…

設計模式精講 Day 12:代理模式(Proxy Pattern)

【設計模式精講 Day 12】代理模式&#xff08;Proxy Pattern&#xff09; 文章內容 在軟件開發中&#xff0c;代理模式是一種常見的結構型設計模式&#xff0c;它通過引入一個代理對象來控制對真實對象的訪問。這種模式不僅能夠增強系統的安全性、靈活性和可擴展性&#xff0c…

企業級知識庫私有化部署:騰訊混元+云容器服務TKE實戰

1. 背景需求分析 在金融、醫療等數據敏感行業&#xff0c;企業需要構建完全自主可控的知識庫系統。本文以某證券機構智能投研系統為原型&#xff0c;演示如何基于騰訊混元大模型與TKE容器服務實現&#xff1a; 千億級參數模型的私有化部署金融領域垂直場景微調高并發低延遲推…

Qt事件系統詳解

一、Qt事件系統概述 Qt事件系統是Qt框架中處理用戶輸入、窗口交互、定時器、異步操作等機制的核心。所有事件均繼承自QEvent類&#xff0c;并通過事件循環&#xff08;Event Loop&#xff09;分發到目標對象。 事件系統基本概念 事件(Event)&#xff1a;描述應用程序內部或外…