C++高精度算法(加、減、乘)

首先聲明,沒有除法是因為我不會(手動狗頭_doge)

簡介

顧名思義,高精度算法是用來算一些超級大的數,比如長到 longlong 都存不下的那種,還有就是小數點后好多位,double都存不下的那種,今天我寫的是第一種——大數。

注意!!!不要輸入負數!!!

#include<bits/stdc++.h>
using namespace std;
string a;
string b;
string func(string,string);
int main()
{cin>>a>>b;cout<<func(a,b);return 0;
}
string func(string x,string y)
{int n[1000]={0};int m[1000]={0};int s[1000]={0};//1.把用戶輸入的數轉進一個個int,每個數位占一個空間//由于數組特性,還要把整個數字反轉過來,方便后續處理int la=x.size();int lb=y.size();for(int i=0;i<la;i++){n[la-1-i]=x[i]-48;}for(int i=0;i<lb;i++){m[lb-1-i]=y[i]-48;}//2.逐位相加,暫時不進位for(int i=0;i<max(la,lb);i++){s[i]=n[i]+m[i];}//3.進位for(int i=0;i<max(la,lb);i++){if(s[i]>=10){s[i+1]++;s[i]=s[i]-10;}}//4.在數組結尾處做標記,方便讀取int p=-1;for(int i=max(la,lb)+1;i>=0;i--){if(s[i]!=0){p=i;break;}}//5.讀取運算結果,轉入stringstring ss="";for(int i=0;i<=p;i++){ss=(char)(s[i]+48)+ss;}return ss;
}

(自動選取大數減去小數)

#include<bits/stdc++.h>
using namespace std;
string a;
string b;
string func(string,string);
int main()
{cin>>a>>b;cout<<func(a,b);return 0;
}
string func(string x,string y)
{//備注:f為true是m比n大,反之亦然//1.首先要反轉數組,再比出兩個數哪個大,因為負數不好處理//相等直接輸出0if(x==y)return 0;int n[10010]={0};int m[10010]={0};int s[10010]={0};//最終答案所在數組int ln=x.size();int lm=y.size();bool f=true;for(int i=0;i<ln;i++){n[ln-1-i]=x[i]-48;}for(int i=0;i<lm;i++){m[lm-1-i]=y[i]-48;}//比大小if(ln>lm){f=false;}else if(ln==lm&&x>y){f=false;}//2.分情況進行計算if(f==true){for(int i=0;i<lm;i++){s[i]=m[i]-n[i];}}else{for(int i=0;i<ln;i++){s[i]=n[i]-m[i];}}//3.退位for(int i=0;i<max(ln,lm);i++){if(s[i]<0){s[i+1]--;s[i]+=10;}}//4.在數組結尾處做標記,方便讀取int p=-1;for(int i=max(ln,lm)+1;i>=0;i--){if(s[i]!=0){p=i;break;}}//5.輸出結果string ss="";for(int i=0;i<=p;i++){ss=(char)(s[i]+48)+ss;}return ss;
}

#include<bits/stdc++.h>
using namespace std;
string a;
string b;
string func(string,string);
int main()
{cin>>a>>b;cout<<func(a,b);return 0;
}
string func(string x,string y)
{int n[10010]={0};int m[10010]={0};int s[20020]={0};int ln=x.size();int lm=y.size();//1.反轉數字for(int i=0;i<ln;i++){n[ln-1-i]=x[i]-48;}for(int i=0;i<lm;i++){m[lm-1-i]=y[i]-48;}//2.逐位相乘,錯位相加for(int i=0;i<lm;i++){for(int j=0;j<ln;j++){s[i+j]+=m[i]*n[j];}}//3.進位for(int i=0;i<ln+lm;i++){s[i+1]+=s[i]/10;s[i]=s[i]%10;}//4.在數組結尾處做標記,方便讀取int p=-1;for(int i=ln+lm;i>=0;i--){if(s[i]!=0){p=i;break;}}//5.輸出結果string ss="";for(int i=0;i<=p;i++){ss=(char)(s[i]+48)+ss;}if(p==-1){return "0";}return ss;
}

加減乘混合

(輸入兩個數以后再次輸入一個數,1是加法,2是減法,3是乘法)

(別想了,輸入123以外的數會有提示)

#include<bits/stdc++.h>
#include<string.h>
#include<string>
using namespace std;
string a;
string b;
string funcjia(string,string);
string funcjian(string,string);
string funccheng(string,string);
int main()
{cin>>a>>b;int t;cin>>t;if(t==1){cout<<funcjia(a,b);}else if(t==2){cout<<funcjian(a,b);}else if(t==3){cout<<funccheng(a,b);}else{cout<<"Sorry,I can't find it.";}return 0;
}
string funcjia(string x,string y)
{int n[1000]={0};int m[1000]={0};int s[1000]={0};//1.把用戶輸入的數轉進一個個int,每個數位占一個空間//由于數組特性,還要把整個數字反轉過來,方便后續處理int ln=x.size();int lm=y.size();for(int i=0;i<ln;i++){n[ln-1-i]=x[i]-48;}for(int i=0;i<lm;i++){m[lm-1-i]=y[i]-48;}//2.逐位相加,暫時不進位for(int i=0;i<max(ln,lm);i++){s[i]=n[i]+m[i];}//3.進位for(int i=0;i<max(ln,lm);i++){if(s[i]>=10){s[i+1]++;s[i]=s[i]-10;}}//4.在數組結尾處做標記,方便讀取int p=-1;for(int i=max(ln,lm)+1;i>=0;i--){if(s[i]!=0){p=i;break;}}//5.讀取運算結果,轉入stringstring ss="";for(int i=0;i<=p;i++){ss=(char)(s[i]+48)+ss;}return ss;
}
string funcjian(string x,string y)
{//備注:f為true是m比n大,反之亦然//1.首先要反轉數組,再比出兩個數哪個大,因為負數不好處理//相等直接輸出0if(x==y)return 0;int n[10010]={0};int m[10010]={0};int s[10010]={0};//最終答案所在數組int ln=x.size();int lm=y.size();bool f=true;for(int i=0;i<ln;i++){n[ln-1-i]=x[i]-48;}for(int i=0;i<lm;i++){m[lm-1-i]=y[i]-48;}//比大小if(ln>lm){f=false;}else if(ln==lm&&x>y){f=false;}//2.分情況進行計算if(f==true){for(int i=0;i<lm;i++){s[i]=m[i]-n[i];}}else{for(int i=0;i<ln;i++){s[i]=n[i]-m[i];}}//3.退位for(int i=0;i<max(ln,lm);i++){if(s[i]<0){s[i+1]--;s[i]+=10;}}//4.在數組結尾處做標記,方便讀取int p=-1;for(int i=max(ln,lm)+1;i>=0;i--){if(s[i]!=0){p=i;break;}}//5.輸出結果string ss="";for(int i=0;i<=p;i++){ss=(char)(s[i]+48)+ss;}return ss;
}
string funccheng(string x,string y)
{int n[10010]={0};int m[10010]={0};int s[20020]={0};int ln=x.size();int lm=y.size();//1.反轉數字for(int i=0;i<ln;i++){n[ln-1-i]=x[i]-48;}for(int i=0;i<lm;i++){m[lm-1-i]=y[i]-48;}//2.逐位相乘,錯位相加for(int i=0;i<lm;i++){for(int j=0;j<ln;j++){s[i+j]+=m[i]*n[j];}}//3.進位for(int i=0;i<ln+lm;i++){s[i+1]+=s[i]/10;s[i]=s[i]%10;}//4.在數組結尾處做標記,方便讀取int p=-1;for(int i=ln+lm;i>=0;i--){if(s[i]!=0){p=i;break;}}//5.輸出結果string ss="";for(int i=0;i<=p;i++){ss=(char)(s[i]+48)+ss;}if(p==-1){return "0";}return ss;
}

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

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

相關文章

思科交換機配置

以下是交換機配置的詳細步驟指南&#xff0c;適用于Cisco交換機&#xff0c;其他品牌需調整命令&#xff1a; 1. 初始連接與基本配置 連接方式&#xff1a;使用Console線連接交換機&#xff0c;通過終端軟件&#xff08;如PuTTY&#xff09;登錄。波特率&#xff1a;9600&…

數據質量問題中,數據及時性怎么保證?如何有深度體系化回答!

數據治理&#xff0c;數據質量這快是中大廠&#xff0c;高階大數據開發面試必備技能&#xff0c;企業基于大數據底座去做數倉&#xff0c;那么首先需要保障的就是數據質量。 數據質量的重要性在現代企業中變得越發突出。以下是數據質量的幾個關鍵方面&#xff0c;說明其對企業…

【學習筆記】CPU 的“超線程”是什么?

1. 什么是超線程&#xff1f; 超線程&#xff08;Hyper-Threading&#xff09;是Intel的技術&#xff0c;讓一個物理CPU核心模擬出兩個邏輯核心。 效果&#xff1a;4核CPU在系統中顯示為8線程。 本質&#xff1a;通過復用空閑的硬件單元&#xff08;如ALU、FPU&#xff09;&a…

閉包的理解

一、閉包的概念 當通過調用外部函數返回的內部函數后&#xff0c;即使外部函數已經執行結束了&#xff0c;但是被內部函數引用的外部函數的變量依然會保存在內存中&#xff0c;我們把引用了其他函數作用域變量的函數和這些被引用變量的集合&#xff0c;稱為閉包&#xff08;Clo…

從小米汽車事故反思 LabVIEW 開發

近期&#xff0c;小米汽車的一起嚴重事故引發了社會各界的廣泛關注。這起事故不僅讓我們對智能汽車的安全性產生了深深的思考&#xff0c;也為 LabVIEW 開發領域帶來了諸多值得汲取的知識與領悟。 在智能汽車領域&#xff0c;尤其是涉及到智能駕駛輔助系統時&#xff0c;安全是…

項目進度延誤的十大原因及應對方案

項目進度延誤主要源于以下十大原因&#xff1a;目標不明確、需求頻繁變更、資源配置不足或不合理、溝通不暢、風險管理不足、缺乏有效的項目監控、技術難題未及時解決、團隊協作效率低下、決策鏈過長、外部因素影響。其中&#xff0c;需求頻繁變更是導致延誤的關鍵因素之一&…

AI 賦能 DBA:如何用 DeepSeek 等大模型簡化數據庫管理工作

AI 賦能 DBA:如何用 DeepSeek 等大模型簡化數據庫管理工作 摘要: 數據庫管理員(DBA)的工作涉及 SQL 優化、故障排查、性能監控等復雜任務。而 DeepSeek、ChatGPT 等大模型可以大幅減少重復勞動,提高 DBA 的工作效率。本文將結合真實案例,介紹如何利用 AI 優化 DBA 工作流…

vxe-table4.6 + vue3.2 + ant-design-vue 3.x 實現對列的顯示、隱藏、排序

概要 vxe-table中的vxe-toolbar沒有拖拽功能&#xff0c;故自己實現 源碼 <template><a-popover v-model:visible"open" placement"bottomRight" trigger"click"><template #content><div class"content">…

c++基礎知識二

1.面向對象 1.1 定義 面向對象編程是一種程序設計方法,它將數據和操作數據的方法封裝在一起,形成類。類是一種用戶自定義的數據類型,它包含了數據和對數據的操作方法。面向對象編程的特點包括封裝、繼承、多態 1.2 訪問控制符 public 公有屬性,方法。都可以訪問 prot…

Netty之ChannelOutboundBuffer詳解與實戰

深入理解Netty的高低水位線機制及其應用實踐 在高性能網絡編程中&#xff0c;Netty作為一個廣泛使用的異步事件驅動的Java框架&#xff0c;其高效的流量控制機制對于系統的穩定性和性能至關重要。本文將深入探討Netty中的高低水位線&#xff08;High/Low Water Mark&#xff0…

(自用)WebSocket創建流程

在Spring Boot項目中新建WebSocket服務&#xff0c;可以按照以下詳細步驟進行操作&#xff1a; 1.創建Spring Boot項目 可以通過Spring Initializr&#xff08;<>&#xff09;快速創建一個新的Spring Boot項目&#xff0c;添加Spring Web和Spring Boot DevTools依賴&…

JQuery初步學習

文章目錄 一、前言二、概述2.1 介紹2.2 安裝 三、語法3.1 文檔就緒3.2 選擇器 四、事件4.1 概述4.2 事件綁定/解綁4.3 一次性事件4.4 事件委托4.5 自定義事件 五、效果5.1 隱藏/顯示5.2 淡入淡出5.3 滑動5.4 動畫 六、鏈七、HTML7.1 內容/屬性7.2 元素操作7.3 類屬性7.4 樣式屬…

module錯誤集合

Library projects cannot set applicationId. applicationId is set to com.example.mylogin in default 在導入一個項目時&#xff0c;提示“Error:Library projects cannot set applicationId. applicationId is set to ‘com.xxx.yyy’ in default config.”&#xff0c;顯…

Spring Cloud 通用相關組件詳解

前言 Spring Cloud 是一個基于 Spring Boot 的微服務開發框架&#xff0c;它為開發者提供了一套完整的工具和組件&#xff0c;用于快速構建分布式系統中的常見模式&#xff08;如服務注冊與發現、負載均衡、配置管理等&#xff09;。本文將詳細介紹 Spring Cloud 的通用組件&a…

BUUCTF-web刷題篇(19)

28.CheckIn 源碼&#xff1a; #index.php <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv&q…

如何在Android系統上單編ko?

文章目錄 一、先了解編譯驅動需要什么&#xff1f;二、配置makefile1、在Android系統編譯LOG上找到編譯器信息&#xff08;一般都會打印出來&#xff09;2、基于源MK構造 可獨立運行的makefile3&#xff09;進入docker&#xff0c;在此makefile目錄下敲make4&#xff09;最后根…

【Pandas】pandas DataFrame to_numpy

Pandas2.2 DataFrame Conversion 方法描述DataFrame.astype(dtype[, copy, errors])用于將 DataFrame 中的數據轉換為指定的數據類型DataFrame.convert_dtypes([infer_objects, …])用于將 DataFrame 中的數據類型轉換為更合適的類型DataFrame.infer_objects([copy])用于嘗試…

2025常用的ETL 產品推薦:助力企業激活數據價值

在當今數字化時代&#xff0c;企業面臨著海量數據的挑戰與機遇&#xff0c;ETL&#xff08;Extract, Transform, Load&#xff09;工具作為數據整合與分析的關鍵環節&#xff0c;其重要性日益凸顯。ETL 廠商眾多&#xff0c;各有優勢&#xff0c;本文將從多個維度進行分析&…

LeetCode算法題(Go語言實現)_37

題目 給你一棵以 root 為根的二叉樹&#xff0c;二叉樹中的交錯路徑定義如下&#xff1a; 選擇二叉樹中 任意 節點和一個方向&#xff08;左或者右&#xff09;。 如果前進方向為右&#xff0c;那么移動到當前節點的的右子節點&#xff0c;否則移動到它的左子節點。 改變前進方…

博途 TIA Portal之1200做從站與匯川EASY的TCP通訊

上篇我們寫到了博途做主站與匯川EASY的通訊。通訊操作起來很簡單,當然所謂的簡單,也是相對的,如果操作成功一次,那么后面就很容易了, 如果操作不成功,就會很遭心。本篇我們將1200做從站,與匯川EASY做主站進行TCP的通訊。 1、硬件準備 1200PLC一臺,帶調試助手的PC機一…