首页 > 其他分享 >高精度模板-结构体

高精度模板-结构体

时间:2023-05-24 18:48:15浏览次数:35  
标签:BigNum 高精度 int len num operator const 模板 结构

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
struct BigNum
{
    int len, s[9999];
    BigNum()
    {
        memset(s, 0, sizeof(s));
        len = 1;
    }
    BigNum operator = (const char* num)
    {
        len = strlen(num);
        for (int i = 0; i < len; ++i)
            s[i] = num[len-i-1] - '0';
        return *this;
    }
    BigNum operator = (const int num)
    {
        char a[9999];
        sprintf(a, "%d", num);
        *this = a;
        return *this;
    }
    BigNum (const int num)
    {
        *this = num;
    }
    BigNum (const char* num)
    {
        *this = num;
    }
    BigNum operator + (const BigNum &a)
    {
        BigNum c;
        c.len = max(len, a.len) + 1;
        for (int i = 0, x = 0; i < c.len; ++i)
        {
            c.s[i] = s[i] + a.s[i] + x;
            x = c.s[i] / 10;
            c.s[i] = c.s[i] % 10;
        }
        if(c.s[c.len-1] == 0)
            --c.len;
        return c;
    }
    BigNum operator * (const BigNum &x)
    {
        BigNum c;
        c.len = len + x.len;
        for (int i = 0; i < len; ++i)
            for (int j = 0; j < x.len; ++j)
            {
                c.s[i+j] += s[i] * x.s[j];
                c.s[i+j+1] += c.s[i+j] / 10;
                c.s[i+j] %= 10;
            }
        if(c.s[c.len-1] == 0)
            --c.len;
        return c;
    }
};
ostream& operator << (ostream &out, const BigNum &x) 
{
    for (int i = x.len - 1; i >= 0; --i)
        cout << x.s[i];
    return out;
}
istream& operator >> (istream &in, BigNum &x)
{
    char num[9999];
    in >> num;
    x = num;
    return in;
}
int main()
{
    int n;
    BigNum ans = 0, num = 1;
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        num = num * i;
        ans = ans + num;
    }
    cout << ans << endl;
    return 0;
}

标签:BigNum,高精度,int,len,num,operator,const,模板,结构
From: https://www.cnblogs.com/Gery-blog/p/17429211.html

相关文章

  • 以太网IO模块:高精度数据采集和快速传输
    随着工业自动化的不断发展和普及,以太网IO模块被广泛应用于控制和监测系统中。该模块具有高精度数据采集和快速传输等特点,使其成为工业自动化应用中不可或缺的重要器件。深圳市钡铼技术有限公司是一家高新技术企业,【钡铼】与【BLIIOT】都是公司品牌,专注工业物联网关、工业智能网关、......
  • 代码小结构
    20230524一个开放方法,如果可预知的,以后会加方法参数的话,就把所有参数放到一个dto的参数类里面,如果你又不想写太多的setAsetBsetC,那就把所有的set方法放到DtoUtil里面。publicclassDtoUtil{publicstaticDtogetDto(Stringa,Strinbb,Stringc){Dtod=......
  • 模板
    C++提供了模板(template)编程的概念。所谓模板,实际上是建立一个通用函数或类,其类内部的类型和函数的形参类型不具体指定,用一个虚拟的类型来代表。这种通用的方式称为模板。模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。一.函数模板1.定义:template......
  • 对应4种作文模板
    2016下半年(问题解决)Inthecontemporaryworld,_(主题词)have/hasbecomeincreasinglyimportant.It'sofgreatnecessityfor___to.Reasonsandconcreteevidencetosupportmyviewpointareasfollows.​ Inthefirstplace,thereisnodoubtthat_____________......
  • 5_24_打卡_数据结构之循环队列
    //循环队列可存储数据数量是maxsize-1//队列长度为(front-rear+maxsize)%maxsize//队列为空时front==rear//队列满时(front+1)%maxsize==rear;#defineMAXSIZE5#include<iostream>usingnamespacestd;typedefstructqueue{ intfront; intrear; intdata[MAXSIZE];}......
  • 结构
    //单调队列//hh为队头,tt为队尾//最形象的例题:https://www.luogu.com.cn/problem/P1886#submit#include<bits/stdc++.h>usingnamespacestd;constintN=1000010;intn,k;inta[N],q[N];///a数组储存数据,q数组储存每个元素的下标;intmain(){cin>>n>>k;for......
  • Acwing 798.差分矩阵(模板)
    题目#include<iostream>usingnamespacestd;constintN=1010;intn,m,q;inta[N][N],b[N][N];voidinsert(intx1,inty1,intx2,inty2,intc){b[x1][y1]+=c;b[x2+1][y1]-=c;b[x1][y2+1]-=c;b[x2+1][y2+1]+=......
  • 常用的表格检测识别方法——表格结构识别方法(上)
    第三章 常用的表格检测识别方法3.2表格结构识别方法  表格结构识别是表格区域检测之后的任务,其目标是识别出表格的布局结构、层次结构等,将表格视觉信息转换成可重建表格的结构描述信息。这些表格结构描述信息包括:单元格的具体位置、单元格之间的关系、单元格的行列位置等。......
  • 关于redis的描述、数据结构、持久化学习笔记
    前言本文围绕面试问题、redis学习记录。本文是个人的笔记,会有遗漏或含糊的地方。描述下redisredis是一款非关系型数据库,它是以key-value的形式存在数据,因为它的数据在内存中所以它的读写速度极高。当然它支持持久化,将数据以二进制形式或者以命令的形式持久化到磁盘。然后......
  • R语言有极值(EVT)依赖结构的马尔可夫链(MC)对洪水极值分析|附代码数据
    阅读全文:http://tecdat.cn/?p=17375最近我们被客户要求撰写关于马尔可夫链的研究报告,包括一些图形和统计输出。为了帮助客户使用POT模型,本指南包含有关使用此模型的实用示例。本文快速介绍了极值理论(EVT)、一些基本示例,最后则通过案例对河流的极值进行了具体的统计分析 EVT的介......