首页 > 其他分享 >高精度

高精度

时间:2024-02-27 23:56:58浏览次数:12  
标签:tmp 10 const 高精度 int Number long

高精度

对于大数,c++中没有可以有效存储的类型。python有自带高精。所以c++只能手写高精,处理大数四则运算问题。对于高精度,一般使用结构体,让代码更简洁。还要重载运算符,也是避免大量函数影响代码美观。

以下是模板,基本原理是列竖式的加减乘除

const int MAXL=2000;
struct Number{
    long long a[MAXL+10];
    Number(){memset(a,0,sizeof a);}
    Number(int x){
        for(int i=1;i<=MAXL;++i){
            a[i] = x%10;
            x /= 10;
        }
    }
    Number operator + (const Number B)const{
        Number C;
        for(int i=1;i<=MAXL;++i){
            C.a[i] += a[i]+B.a[i];
            if(C.a[i]>=10){
                C.a[i+1] += C.a[i]/10;
                C.a[i] %= 10;
            }
        }
        return C;
    }
    Number operator * (const long long x)const{
        Number C;
        for(int i=1;i<=MAXL;++i){
            C.a[i] += a[i]*x;
            if(C.a[i]>=10){
                C.a[i+1] += C.a[i]/10;
                C.a[i] %= 10;
            }
        }
        return C;
    }
    Number operator / (const long long x)const{
        Number C;
       	long long tmp=0;
        for(int i=MAXL;i>=0;--i){
            C.a[i] = (tmp*10+a[i])/x;
            tmp = (tmp*10+a[i])%x;
        }
        return C;
    }
    void print(){
        int i=MAXL;
        while(i>=1&&a[i]==0)--i;//要判边界
        if(i<1)putchar('0');
        for(;i>=1;--i){
			printf("%c",'0'+a[i]);
		}
        putchar('\n');
    }
};

应用,比如一些组合数学问题

Number C(int a,int b){
    Number res(1);
    for(int i=0;i<b;++i)
		res=res*(a-i);
    for(int i=1;i<=b;++i)
		res=res/i;
    return res;
}

标签:tmp,10,const,高精度,int,Number,long
From: https://www.cnblogs.com/life-of-a-libertine/p/18038791

相关文章

  • 高精度模板!大众福音!
    超级福音!!!高进度模板两大传送门原址传送门(有详细讲解)发现地址传送门废话不多说,直接上代码!#include<bits/stdc++.h>structBigInt{ staticconstintmaxlength=1005; intnum[maxlength],len; voidclean(){ memset(num,0,sizeof(num)); len=1; } BigIn......
  • timeBeginPeriod 高精度定时器 Sleep
    #include"timeapi.h"#pragmacomment(lib,"winmm")//DWORD__stdcallThreadTest(LPVOIDpThreadParam){CLogmLog;inti=100;timeBeginPeriod(1);//1表示1ms精度while(i--){mLog.WriteLog("%d",i);......
  • BOSHIDA 高精度DC电源模块在科学实验中的作用与价值
    BOSHIDA高精度DC电源模块在科学实验中的作用与价值BOSHIDA高精度DC电源模块在科学实验中具有重要的作用和价值。下面列举了几个方面: 1.稳定的电源供电:科学实验中通常需要稳定的电源供电,以确保实验结果的准确性和可重复性。高精度DC电源模块能够提供稳定的直流电压输出,有效......
  • Windows高精度定时器
     自从上次封装微秒延时函数后,利用空闲时间试着封装一个微秒定时器(类似MFC定时器形式)使用起来效果还不错。 关于定时器的几点介绍:  1.设计采用了自动释放定时器节点方式(增加虚析构函数在内部做相关释放判断,即使用完不释放节点也没关系);  2.设计采用了双向链表方......
  • 数字式频率计、通用计数器、高精度频率计的操作使用说明
    在选择测量仪器之前必须了解待测信号的所有特性,附非肯定待测信号是纯净(无噪声干扰)、平稳、单一频率成分,否则应该在制订测试方案前用频谱分析仪先观测待测信号中的干扰信号及噪声电平,然后看计数器的性能是否能允许这些干扰并仍能成功地完成频率的测量。给相应通道输入频率信号,点击启......
  • 【洛谷 P2437】蜜蜂路线 题解(递归+记忆化搜索+高精度)
    蜜蜂路线题目描述一只蜜蜂在下图所示的数字蜂房上爬动,已知它只能从标号小的蜂房爬到标号大的相邻蜂房,现在问你:蜜蜂从蜂房开始爬到蜂房,,有多少种爬行路线?(备注:题面有误,右上角应为)输入格式输入的值输出格式爬行有多少种路线样例#1样例输入#1114样例输出#1377提示对于100%的......
  • 高精度运算
    逆序voidreverse(string&s){for(inti=0;i<s.size()/2;i++){chart=s[i];s[i]=s[s.size()-1-i];s[s.size()-1-i]=t;}}高精度加法高精+高精stringans;voidadd(stringa,stringb){ans.cl......
  • 基础算法(七)高精度除法模板
    模板如下#include<iostream>#include<vector>#include<algorithm>usingnamespacestd;vector<int>div(vector<int>&A,intB,int&r){vector<int>C;for(inti=0;i<A.size();i++){r=r*10+A[i];......
  • 基础算法(六)高精度乘法模板
    模板如下#include<iostream>#include<vector>usingnamespacestd;vector<int>mul(vector<int>&A,intb){vector<int>C;intk=0;for(inti=0;i<A.size();i++){k+=A[i]*b;C.push_back(k%10);......
  • 基础算法(五)高精度减法模板
    模板如下#include<iostream>#include<vector>usingnamespacestd;boolcmp(vector<int>&A,vector<int>&B){if(A.size()!=B.size())returnA.size()>B.size();for(inti=A.size();i>=0;i--){if(A[i]!=B[i])......