当前位置:网站首页>大整数类实现阶乘
大整数类实现阶乘
2022-07-07 07:33:00 【昨夜太平长安_】
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int maxn = 10000;
struct BigInt
{
BigInt(int x = 0)
{
memset(arr, 0, sizeof(arr));//初始化全为0
for (len = 1; x; len++)
{
arr[len] = x % 10;//对x逆序保存
x /= 10;
}
len--;
}
int& operator[](int i)
{
return arr[i];//用x[i]代替x.arr[i]
}
void flatten(int L)//把不是一位数的位处理成一位数,故称展平,L要不小于有效长度
{
len = L;
for (int i = 1; i <= len; ++i)
{
arr[i + 1] += arr[i] / 10;
arr[i] %= 10;
}
while (!arr[len])//消除前置0
{
len--;
}
}
void print()//反向输出
{
for (int i = max(1, len); i >= 1; --i)
{
cout << arr[i];
}
cout << endl;
}
int len;
int arr[maxn];
};
BigInt operator+(BigInt &a,BigInt &b)
{
BigInt c;
int len = max(a.len, b.len);
for (int i = 1; i <= len; ++i)
{
c[i] += a[i] + b[i];
}
c.flatten(len + 1);//最大长度不超过len+1
return c;
}
BigInt operator*(BigInt& a, BigInt& b)
{
BigInt c;
int len = a.len + b.len;
for (int i = 1; i <= a.len; ++i)
{
for (int j = 1; j <= b.len; ++j)
{
c[i + j - 1] += a[i] * b[j];//a[i] * b[j]的结果产生在i+j-1位上
}
}
c.flatten(len );//最大长度不超过len+1
return c;
}
BigInt operator*(BigInt& a, int& b)
{
BigInt c;
int len = a.len;
for (int i = 1; i <= len; ++i)
{
c[i] += a[i] *b;
}
c.flatten(len + 11);//int类型最长10位,所以可以这样展平
return c;
}
int main()
{
int n;
cin >> n;
BigInt fac(1);
BigInt ans(0);
for (int i = 1; i <= n; ++i)
{
fac = fac * i;
ans = ans + fac;
}
ans.print();
return 0;
}
边栏推荐
- Introduction to automated testing framework
- Phpcms realizes PC website access to wechat native payment
- ISP、IAP、ICP、JTAG、SWD的编程特点
- Google colab loads Google drive (Google drive is used in Google colab)
- Luogu p2482 [sdoi2010] zhuguosha
- 高斯消元
- request对象对请求体,请求头参数的解析
- The request object parses the request body and request header parameters
- ORM--数据库增删改查操作逻辑
- The landing practice of ByteDance kitex in SEMA e-commerce scene
猜你喜欢
企业实战|复杂业务关系下的银行业运维指标体系建设
Postman interface test IV
Wallys/IPQ6010 (IPQ6018 FAMILY) EMBEDDED BOARD WITH ON-BOARD WIFI DUAL BAND DUAL CONCURRENT
柏拉图和他的三个弟子的故事:如何寻找幸福?如何寻找理想伴侣?
高数_第1章空间解析几何与向量代数_向量的数量积
【学习笔记-李宏毅】GAN(生成对抗网络)全系列(一)
Arcgis操作: 批量修改属性表
Delete a record in the table in pl/sql by mistake, and the recovery method
使用BigDecimal的坑
Agile course training
随机推荐
CDZSC_2022寒假个人训练赛21级(1)
Video based full link Intelligent Cloud? This article explains in detail what Alibaba cloud video cloud "intelligent media production" is
[original] what is the core of programmer team management?
[untitled]
Using keras in tensorflow to build convolutional neural network
Performance optimization record of the company's product "yunzhujia"
ORM -- logical relation and & or; Sort operation, update record operation, delete record operation
Deadlock caused by non clustered index in SQL Server
ES6中的函數進階學習
MCU与MPU的区别
ORM模型--关联字段,抽象模型类
Finally, there is no need to change a line of code! Shardingsphere native driver comes out
C socke server, client, UDP
Pit encountered by vs2015 under win7 (successful)
中国首款电音音频类“山野电音”数藏发售来了!
Why does the starting service report an error when installing MySQL? (operating system Windows)
STM32中AHB总线_APB2总线_APB1总线这些是什么
CentOS installs JDK1.8 and mysql5 and 8 (the same command 58 in the second installation mode is common, opening access rights and changing passwords)
Gym - 102219J Kitchen Plates(暴力或拓扑序列)
Basic chapter: take you through notes