还没有写完,目前只实现了加,乘,且不能作用于负数

\(update\ in 20.4.8 添加了高精除低精ddiv函数,比较大小comp函数\)

#include <bits/stdc++.h>
using namespace std;
const int maxn=5009;
struct bignum{
int num[maxn],len;
bignum(){memset(num,0,sizeof(num));}
};
bool comp(bignum a,bignum b)//比较函数
{
if(a.len!=b.len) return (a.len>b.len)?1:0;
for(int i=a.len-1;i>=0;i--)
if(a.num[i]!=b.num[i]) return (a.num[i]>b.num[i])?1:0;
return -1;//相等
}
bignum operator / (bignum a,int b)//高精除以低精度
{
bignum c=a;
int tw=0,len=a.len;
for(int i=len-1;i>=0;i--)
{
int k=(tw*10+c.num[i])/b;
tw=(tw*10+c.num[i])%b;
c.num[i]=k;
}
while(c.num[len-1]==0) len--;
c.len=len;
return c;
}
bignum init(bignum &a,string s)
{
int len=s.length();
if(s[0]=='-')//处理负数
len--,a.num[maxn-1]=-1;//这样len-i-1就不会到0去,且留下是负数的标记
for(int i=0;i<len;i++)
a.num[i]=s[len-i-1]-'0';
a.len=len;
return a;
}
bignum Add(bignum &a,bignum &b)
{
bignum c;
int len=max(a.len,b.len);
for(int i=0;i<len;i++)
{
c.num[i]+=(a.num[i]+b.num[i]);
c.num[i+1]+=c.num[i]/10;
c.num[i]%=10;
}
if(c.num[len]) len++;//加法最多进1位
c.len=len;
return c;
}
bignum dmull(bignum &a,int s)//高精乘低精
{
for(int i=0;i<a.len;i++) a.num[i]*=s;
for(int i=0;i<a.len;i++)
{
if(a.num[i]>=10)
{
if(i==a.len-1) a.len++;
a.num[i+1]+=a.num[i]/10;
a.num[i]%=10;
}
}
return a;
}
bignum Hmull(bignum &a,bignum &b)//高精乘高精
{
bignum c;
for(int i=0;i<a.len;i++)
for(int j=0;j<b.len;j++)
{
c.num[i+j]+=(a.num[i]*b.num[j]);
c.num[i+j+1]+=c.num[i+j]/10;
c.num[i+j]%=10;
}
int len=a.len+b.len;
while(c.num[len-1]==0&&len>1) len--;
c.len=len;
return c;
}
bignum ddiv(bignum a,bignum b,bignum &c,int &f)//低精度除法
{
//c是除的结果,f是余数
for(int i-a.len-1;i>=0;i--)
{
f=f*10+a.num[i];//慢慢做求余
c.num[i]=f/b;
f%=b;
}
while(len>1&&c.num[len-1]==0) len--;
c.len=len;
}
void print(bignum &a)
{
for(int i=a.len-1;i>=0;i--) cout<<a.num[i];
}
int main()
{
int n;
cin>>n;
bignum temp,ans;
//下面是求解S=1!+2!+3!....+n!
init(ans,"1");init(temp,"1");
for(int i=2;i<=n;i++)
{
temp=dmull(temp,i);
ans=Add(ans,temp);
}
print(ans);
}

高精度封装Bignum的更多相关文章

  1. noip2006 2^k进制数

    设r是个2k进制数,并满足以下条件: (1)r至少是个2位的2k进制数. (2)作为2k进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位. (3)将r转换为2进制数q后,则q的总位数不超过w ...

  2. hdu1715

    http://acm.hdu.edu.cn/showproblem.php?pid=1715 模板大数: #include <stdio.h> #include <string.h& ...

  3. hdu 1002 A+B

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1002 复习一下大数 模板: #include <stdio.h> #include <s ...

  4. N! HDU 1042

    N! Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...

  5. 结构体封装高精度 大整数BigInt

    曾经很讨厌高精度,因为它很长,不好记,而且在不是很单纯的题目里面感觉很烦(一个数就是一个数组).在一道题目中出现的时候总是用一些奇技淫巧混过去(比如把两个$long$ $long$拼在一起). 现在. ...

  6. [SinGuLaRiTy] 复习模板-高精度模板

    [SinGuLaRiTy-1042] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 结构体封装 //高精度运算 注意%I64d与%lld # ...

  7. [Template]高精度模板

    重新写一下高精度模板(不要问我为什么) 自认为代码风格比较漂亮(雾 如果有更好的写法欢迎赐教 封装结构体big B是压位用的进制,W是每位长度 size表示长度,d[]就是保存的数字,倒着保存,从1开 ...

  8. 【PCB】电子元件封装大全及封装常识

    电子元件封装大全及封装常识 电子元件封装大全及封装常识 一.什么叫封装封装,就是指把硅片上的电路管脚,用导线接引到外部接头处,以便与其它器件连接.封装形式是指安装半导体集成电路芯片用的外壳.它不仅起着 ...

  9. Linux时间子系统之六:高精度定时器(HRTIMER)的原理和实现

    转自:http://blog.csdn.net/droidphone/article/details/8074892 上一篇文章,我介绍了传统的低分辨率定时器的实现原理.而随着内核的不断演进,大牛们已 ...

随机推荐

  1. Exchange 2016 OWA登陆异常

    今天,收到脚本的告警信息,有一台Exchange服务器OWA无法登陆! 手动进行了一下测试,发现确实存在问题,报错信息如下: 检查了一下该台服务器的日志,找到了如下信息 1.访问OWA的请求在HTTP ...

  2. mysql优化之分区

    mysql分区类型 日常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表.这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下,如果涉及联合查询的情况,性能会 ...

  3. stand up meeting 1--11

    今天国庆同学回中科大考试因此缺席了今天的daily scrum.不过国庆的任务已经基本完成,不会影响项目进度. 今日更新: 分享功能已经完成一个版本,如下图为分享至邮件: 针对AP返回结果中没有Wor ...

  4. Feature list, Standard and Test plan for BETA Release 12/22/2015

    ===================BETA RELEASE FEATRURE LIST==================== 1. Log in and account manager for ...

  5. Daily Scrum 12/17/2015

    Process: Zhaoyang:完成了相册图片的异步加载. Yandong&Dong:   对Azure的体系架构进行学习和相应的编程. Fuchen:   对Oxford计划中的NLP接 ...

  6. lua 逻辑运算 and, or, not

    这边并非说lua低级,为了方便区分才这么写的. 高级语言中的逻辑运算符是&&,||,! a&&b : 当a和b都为真, 结果返回为真,当a或者b有一个为假,结果返回为假 ...

  7. Mysql:小主键,大问题

    今日格言:让一切回归原点,回归最初的为什么. 本篇讲解 Mysql 的主键问题,从为什么的角度来了解 Mysql 主键相关的知识,并拓展到主键的生成方案问题.再也不怕被问到 Mysql 时只知道 CR ...

  8. phpstudy之访问loaclhost显示目录

    phpstudy版本:phpstudy2018 具体操作: 当前版本的默认设置访问网站根目录是不会显示目录的,需要我们设置,其实也很简单,只需两步就可以搞定 1.找到phpstudy目录下的www文件 ...

  9. python 基础篇 类基础与继承

    先来简单解释几个概念 类:一群有着相同属性和函数的对象的集合,这里对应 Python 的 class. 对象:集合中的一个事物,这里对应由 class 生成的某一个 object,比如代码中的 har ...

  10. 破解idea2019版本至2089年(windows系统)

    1.首先必须安装idea,然后找到安装目录下的bin目录下面 2.编辑俩个以.exe.vmoptions的文件(俩个文件的最后一行都得这样写) 3.重新打开idea,找到help下面的Register ...