高精度計算

来源:https://www.cnblogs.com/poi-bolg-poi/archive/2019/05/07/10827841.html
-Advertisement-
Play Games

高精度計算和豎式計算沒什麼區別,但由於數據很大需要用字元串讀入所以過程中可能會有一些小問題。高精度算是學oi的基本知識所以直接上我的優(chou)美(lou)代碼。 高精度演算法,屬於處理大數字的數學計算方法。在一般的科學計算中,會經常算到小數點後幾百位或者更多,當然也可能是幾千億幾百億的大數字。一般 ...


高精度計算和豎式計算沒什麼區別,但由於數據很大需要用字元串讀入所以過程中可能會有一些小問題。高精度算是學oi的基本知識所以直接上我的優(chou)美(lou)代碼。

高精度演算法,屬於處理大數字的數學計算方法。在一般的科學計算中,會經常算到小數點後幾百位或者更多,當然也可能是幾千億幾百億的大數字。一般這類數字我們統稱為高精度數,高精度演算法是用電腦對於超大數據的一種模擬加,減,乘,除,乘方,階乘,開方等運算。對於非常龐大的數字無法在電腦中正常存儲,於是,將這個數字拆開,拆成一位一位的,或者是四位四位的存儲到一個數組中, 用一個數組去表示一個數字,這樣這個數字就被稱為是高精度數。高精度演算法就是能處理高精度數各種運算的演算法,但又因其特殊性,故從普通數的演算法中分離,自成一家。--百度百科

高精度加法(洛谷P1601

題目描述

高精度加法,x相當於a+b problem,不用考慮負數。

輸入輸出格式

輸入格式:

 

分兩行輸入a,b<=10^500

 

輸出格式:

 

輸出只有一行,代表A+B的值

 

輸入輸出樣例

輸入樣例#1: 
1
1
輸出樣例#1: 
2
#include<cstdio>
#include<cstring>
#include<string>
#include<iostream>
using namespace std;
int n,k;
char shu1[1001],shu2[1001];
char c1[1001],c2[1001];
char ans[1001];
int main()
{
    memset(c1,0,sizeof(c1));
    memset(c2,0,sizeof(c2));
    scanf("%s",shu1);
    scanf("%s",shu2);
    int n1=strlen(shu1);
    int n2=strlen(shu2);
    int js1=1,js2=1;
    for(int i=n1-1;i>=0;--i)
    {
        c1[js1]=shu1[i]-'0';
        js1++;
    }
    for(int i=n2-1;i>=0;--i)
    {
        c2[js2]=shu2[i]-'0';
        js2++;
    }
    int sum=1;
    js1--; js2--;
    while(sum<=js1||sum<=js2)
    {
        ans[sum]+=c1[sum]+c2[sum];
        if(ans[sum]>=10)
        {
            ans[sum]-=10;
            ans[sum+1]+=1;
        }
        sum++;
    }
    while(ans[sum]==0&&sum!=1) sum--;
    for(int i=sum;i>=1;--i)
        printf("%d",int(ans[i]));
    return 0;
}
高精加

 高精度減法(洛谷P2142

題目描述

高精度減法

輸入輸出格式

輸入格式:

 

兩個整數a,b(第二個可能比第一個大)

 

輸出格式:

 

結果(是負數要輸出負號)

 

輸入輸出樣例

輸入樣例#1: 
2
1
輸出樣例#1: 
1

說明

20%數據a,b在long long範圍內

100%數據0<a,b<=10的10000次方

比較麻煩,稍微講一講。

#include<cstdio>
#include<cstring>
#include<string>
using namespace std;
int n,k;
char shu1_false[10001],shu2_false[10001];
char shu1_true[10001],shu2_true[10001];
char c1[10001],c2[10001];
char ans[10001];
int js1_false=0,js2_false=0;
int main()
{
    memset(c1,0,sizeof(c1));//初始化 
    memset(c2,0,sizeof(c2));//初始化 
    scanf("%s",shu1_false);//讀入 
    scanf("%s",shu2_false);//讀入 
    int n1_false=strlen(shu1_false),n2_false=strlen(shu2_false);//計算兩個串的長度。
    if(n1_false==1&&shu1_false[0]=='0')
    {
        js1_false=1;
        shu1_true[0]='0';
    }
    if(n2_false==1&&shu2_false[0]=='0')
    {
        js2_false=1;
        shu2_true[0]='0';
    }//判斷有數為0的情況。 
    bool bz1=0,bz2=0;
    for(int i=0;i<n1_false;++i)
    {
        if(bz1==0&&shu1_false[i]!='0') bz1=1;
        if(bz1==1)
        {
            shu1_true[js1_false]=shu1_false[i];
            js1_false++;
        }
    }
    js1_false--;
    for(int i=0;i<n2_false;++i)
    {
        if(bz2==0&&shu2_false[i]!='0') bz2=1;
        if(bz2==1)
        {
            shu2_true[js2_false]=shu2_false[i];
            js2_false++;
        }
    }
    js2_false--;//將兩個串去除前導零並記下來。
    int js1_true=1,js2_true=1;
    int n1_true=strlen(shu1_true),n2_true=strlen(shu2_true);
    if(n2_true>n1_true||(n2_true==n1_true&&strcmp(shu1_true,shu2_true)<0))//判斷兩個串誰大誰小。 串一<串二時。 
    {
        printf("-");//輸出﹣號。 
        for(int i=js2_false;i>=0;--i)
        {
            c1[js1_true]=shu2_true[i]-'0';
            js1_true++;
        }
        for(int i=js1_false;i>=0;--i)
        {
            c2[js2_true]=shu1_true[i]-'0';
            js2_true++;
        }//將第二個串存到c1, 第一個串存到c2 
    }
    else//大於的話。 
    {
        for(int i=js1_false;i>=0;--i)
        {
            c1[js1_true]=shu1_true[i]-'0';
            js1_true++;
        }
        for(int i=js2_false;i>=0;--i)
        {
            c2[js2_true]=shu2_true[i]-'0';
            js2_true++;
        }//將第一個串存到c1, 第二個串存到c2 
    }
    js1_true--; js2_true--;
    int sum=1;
    while(sum<=js1_true||sum<=js2_true)
    {
        if(c1[sum]<c2[sum])
        {
            c1[sum]+=10;
            c1[sum+1]-=1;
        }//借一 
        ans[sum]=c1[sum]-c2[sum];
        sum++;
    }//計算減法。 
    while(ans[sum]==0&&sum!=1) sum--;//去前導零。 
    for(int i=sum;i>=1;--i)//輸出答案。 
        printf("%d",int(ans[i]));
    return 0;
}
高精度減法

 時隔13天,整整13天,我又來更新了!

P1303 A*B Problem

題目描述

求兩數的積。

輸入輸出格式

輸入格式:

兩行,兩個數。

輸出格式:

輸入輸出樣例

輸入樣例#1: 
1 
2
輸出樣例#1: 
2

說明

每個數字不超過10^2000,需用高精

 

Code(沒處理負數):

#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<cstdlib>
using namespace std;
char shu1[2020],shu2[2020];
char c1[2020],c2[2020];
char ans[5000];
int len=0;
int main()
{
    memset(ans,0,sizeof(ans));
    int js1=1,js2=1;
    cin>>shu1>>shu2;
    int len1=strlen(shu1),len2=strlen(shu2);
    for(int i=len1-1;i>=0;--i)
        c1[js1++]=shu1[i]-'0';
    while(js1>1&&c1[js1]==0) js1--;
    for(int i=len2-1;i>=0;--i)
        c2[js2++]=shu2[i]-'0';
    while(js2>1&&c2[js2]==0) js2--;
    for(int i=1;i<=js1;++i)
    {
        int jw=0;
        for(int j=1;j<=js2;++j)
        {
            len=j+i-1;
            ans[j+i-1]+=c1[i]*c2[j];
            jw=ans[j+i-1]/10;
            ans[j+i-1]%=10;
            if(jw>0)
            {
                ans[j+i]+=jw;
                jw=0;
                if(j+i>len) len=j+i;
            }
        }
    }
    while(len>1&&ans[len]==0) len--;
    for(int i=len;i>=1;--i)
        cout<<int(ans[i]);
    return 0;
}
高精乘

 


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

-Advertisement-
Play Games
更多相關文章
  • day21 04 三級菜單 對每次用戶輸入與調用進行詳細展開分析: 運行結果: 其中比較繞的地方就是當用戶輸入b和q的時候了: 用戶輸入b 返回上一級菜單:利用給調用的地方(上一級菜單)返回一個值b,然後結束語句,就在上一級繼續迴圈 用戶輸入q 退出程式:通過一層一層的返回q值,知道退出程式 2.使 ...
  • 1.2 介面 1.2.1 介面的概念 介面是一種數據類型,引用數據類型。interface定義介面。 1.1.1 介面的特性 [1] 介面中所有變數都是static final 類型,且都是預設都是public訪問許可權。 [2] 介面沒有構造方法 => 介面不能實例化。 [3] 介面中所有的方法都是 ...
  • goquery運行缺包就用get github.com\andybalholm\cascadia下到gopath,然後出現“non-standard import”錯誤,說明github.com\andybalholm\cascadia和golang.org/x/net/html只能放在gopath ...
  • 轉載自 GitHub 的 Jack-Cherish 大神 基本環境配置 版本:python3 系統:Windows 相關模塊: import requests import re import json import os 代碼實現 ...
  • Github https://github.com/gongluck/FFmpeg4.0 study/blob/master/official%20example/my_example.cpp C++ include include // define NOVIDEO // define NOAUD ...
  • 在學習Python之前,先安裝好編程所需的編譯環境也就是IDE,在安裝PycharPm之前先安裝最新版本的anaconda根據不同的系統選擇不同的版本,安裝好anaconda以後再安裝Pycharm,至於如何安裝呢,自己去查百度吧。 在使用Pycharm前先調整字體種類和字體大小,具體操作如下:移動 ...
  • 學JAVA那麼多天了,所以就不寫那啥了,哈哈 Map 是一個很實用的東西,它查詢的速度也是飛快的。還有很多好的地方, 至於好在哪裡,我也說不清。 還是用代碼來說吧: map.put("李四","007");通過put方法進行增加內容 map.put("王五","006"); map.put("張三" ...
  • java虛擬機會對成員變數進行初始化 1 基本數據類型 1.1 整數類型 (byte,short,int,long)預設值為0 1.2 浮點型 單精度浮點型 float 預設值為 0.0f 雙精度浮點型 double 預設值為 0.0d 1.3 字元型 char 預設值為 \u0000 \u0000 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...