#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; const int Bit = ;
const int Max_N = ; struct BigNumber {
long long num[Max_N];
int len; BigNumber () {
len = ;
memset(num, , sizeof num);
} BigNumber (long long A) {
len = ;
while (A) {
num[++ len] = A % Bit;
A /= Bit;
}
} void Clear() {
len = ;
memset(num, , sizeof num);
} BigNumber operator = (const BigNumber &A) const {
BigNumber ret;
ret.len = A.len;
for (int i = ; i <= A.len; ++ i) {
ret.num[i] = A.num[i];
}
return ret;
} BigNumber operator + (const BigNumber &A) const {
BigNumber ret;
ret.len = max(A.len, len) + ;
for (int i = ; i <= len; ++ i) {
ret.num[i + ] += (A.num[i] + num[i]) / Bit;
ret.num[i] += (A.num[i] + num[i]) % Bit;
}
while (!ret.num[ret.len] && ret.len) -- ret.len;
return ret;
} BigNumber operator - (const BigNumber &A) const {
BigNumber ret = *this;
ret.len = max(len, A.len) + ;
for (int i = ; i <= A.len; ++ i) {
ret.num[i] -= A.num[i];
if (ret.num[i] < ) {
ret.num[i] += Bit;
ret.num[i + ] --;
}
}
while (!ret.num[ret.len] && ret.len) -- ret.len;
return ret;
} BigNumber operator * (const BigNumber &A) const {
BigNumber ret;
ret.len = len + A.len + ;
for (int i = ; i <= len; ++ i) {
for (int j = ; j <= A.len; ++ j) {
long long v = 1LL * num[i] * A.num[j] + ret.num[i + j - ];
ret.num[i + j] += v / Bit;
ret.num[i + j - ] += v % Bit;
}
}
while (!ret.num[ret.len] && ret.len) -- ret.len;
return ret;
} BigNumber operator / (const int &A) const {
BigNumber ret;
ret.len = len + ;
for (int i = ret.len; i > ; -- i) {
ret.num[i - ] = (ret.num[i] + num[i]) % A * Bit;
ret.num[i] = (ret.num[i] + num[i]) / A;
}
ret.num[] = ;
while (!ret.num[ret.len] && ret.len) -- ret.len;
return ret;
} void Read() {
Clear();
static char S[];
scanf("%s", S + );
int N = strlen(S + );
long long Pow = ;
for (int i = N; i; -- i) {
if (Pow == ) ++ len;
num[len] += (S[i] - '') * Pow;
Pow *= ;
if (Pow == Bit) Pow = ;
}
} void Write() {
printf("%lld", num[len]);
for (int i = len - ; i > ; -- i) {
printf("%09lld", num[i]);
}
}
} ; namespace WorkSpace {
void Main() {
BigNumber A;
A.Read();
long long B;
scanf("%lld", &B);
BigNumber(B).Write(); puts("");
(A * BigNumber(B)).Write();
return ;
}
} int main() {
WorkSpace :: Main();
return ;
}

by yjl

      ——QAQ%%%yjl

QAQ高精度模板笔记√的更多相关文章

  1. QAQ数论模板笔记√

    #include <cstdio> using namespace std; long long gcd(long long a, long long b) { // (a, b) ret ...

  2. [Template]高精度模板

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

  3. C++高精度模板

    原文地址:http://blog.csdn.net/wall_f/article/details/8373395 原文只附代码,没有解析,本文增加了一些对代码的解释. 请注意:本模板不涉及实数运算与负 ...

  4. [note]高精度模板

    高精度模板 先定义一个struct struct gj{ int l,s[N]; bool fh; void Print(){ if(fh)putchar('-'); for(int i=l;i> ...

  5. 高精度模板 支持各种运算 c++

    绪言 自从有了高精度模板,妈妈再也不用怕我不会打高精度了! 代码 代码长度与日俱增啊~~~ #include<iostream> #include<cstring> #incl ...

  6. 高精度模板 Luogu P1932 A+B & A-B & A*B & A/B Problem

    P1932 A+B & A-B & A*B & A/B Problem 题目背景 这个题目很新颖吧!!! 题目描述 求A.B的和差积商余! 输入输出格式 输入格式: 两个数两行 ...

  7. c++模板笔记

    使用vc2015进行C++ 模板的学习实验和笔记 用简单示例学习了解STL template大部头理论书 讲解各种规则和各种规则例外的解决办法 集中精力在20%的规则中的阴暗角落而不是80%实践中要注 ...

  8. Java 大数、高精度模板

    介绍: java中用于操作大数的类主要有两个,一个是BigInteger,代表大整数类用于对大整数进行操作,另一个是BigDecimal,代表高精度类,用于对比较大或精度比较高的浮点型数据进行操作.因 ...

  9. JAVA高精度模板

    刚开始还坚持用C++写高精来着,后来发现JAVA写高精方便太多了,所以也来学习一下JAVA高精度的模板. 参考:https://www.cnblogs.com/imzscilovecode/p/883 ...

随机推荐

  1. ADO.NET笔记——将DataReader作为函数返回值

    相关知识: 在很多情况下,可能把数据库的访问封装到一个函数中,通过该函数返回一个DataReader对象给调用者.例如定义函数:SqlDataReader returnDR(),然后再Main函数中调 ...

  2. SharedPreferences的基本用法

    获取SharedPreferences的两种方式: 1 调用Context对象的getSharedPreferences()方法 2 调用Activity对象的getPreferences()方法 两 ...

  3. js 函数闭包内部返回函数体调用方法难点解答

    今天在网上,看到一篇关于js函数难点的文章,js函数的一些难点.在那上面提了一下,关于js函数返回另一个函数的问题,并附上了一道面试题: var add = function(x){ var sum ...

  4. 【转载】Powershell设置世纪互联Office365嵌套组发送权限

    Start-Transcript ".\Set-GroupSendPermisionLog.txt" -Force function Get-DLMemberRecurse { $ ...

  5. oracle-linux下挂载"移动硬盘" NTFS类型

    环境: ORACLE-LINUX 5.7 全新移动硬盘(未使用过) 移动硬盘空间3T 在默认情况下,Linux系统不支持NTFS分区挂载 1.服务器: A服务器和B服务器为一套ORACLE-RAC,移 ...

  6. netlink---Linux下基于socket的内核和上层通信机制 (转)

    需要在linux网卡 驱动中加入一个自己的驱动,实现在内核态完成一些报文处理(这个过程可以实现一种零COPY的网络报文截获),对于复杂报文COPY下必要的数据交给用户 态来完成(因为过于复杂的报文消耗 ...

  7. Thinkphp模板中使用自定义函数的方法

    注意:自定义函数要放在项目应用目录/common/common.php中. 这里是关键. 模板变量的函数调用格式:{$varname|function1|function2=arg1,arg2,### ...

  8. c++线程传参问题

    std::thread可以和任何可调用类型一起工作,可调用对象和函数带有参数时,可以简单地将参数传递给std::thread的构造函数 例如: #include<iostream> #in ...

  9. 结构体,公用体,枚举类型的sizeof

    1)枚举类enum型空间计算 enum只是定义了一个常量集合,里面没有“元素”,而枚举类型是当做int来存储的,所以枚举类型的sizeof值都为4 enum color(red,pink,white, ...

  10. 51nod 1257 背包问题 V3

    1257 背包问题 V3 基准时间限制:3 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 N个物品的体积为W1,W2......Wn(Wi为整数),与之相对应的价值为P1,P2.. ...