BigInt

2023-10-19 05:58
文章标签 bigint

本文主要是介绍BigInt,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考 http://www.cnblogs.com/studynote/p/3445398.html

#include <iostream>
#include <time.h>using namespace std;class BigInt {
public://BigInt();BigInt(const char*);BigInt(unsigned int n = 0);BigInt(const BigInt&);BigInt& operator=(const BigInt&);BigInt operator + (const BigInt& other) const;void print(FILE* F = stdout) const;~BigInt() {delete[] digits;}
private:char* digits;unsigned ndigits;BigInt(char* d, unsigned n) {digits = d;ndigits = n;}friend class DigitStream;
};void BigInt::print(FILE *f) const {for (int i = ndigits - 1; i >= 0; --i) {fprintf(f, "%c", digits[i] + '0');}
}BigInt::BigInt(const BigInt& n) {unsigned i = n.ndigits;digits = new char[i];ndigits = i;memcpy(digits, n.digits, i);
}BigInt& BigInt::operator=(const BigInt& n) {if (this != &n) {BigInt tmp(n);swap(tmp.ndigits, ndigits);swap(tmp.digits, digits);}return *this;
}BigInt::BigInt(unsigned n) {char d[3 * sizeof(unsigned) + 1];char *dp = d;ndigits = 0;do {*dp++ = n % 10;n /= 10;ndigits++;} while (n > 0);digits = new char[ndigits];for (register int i = 0; i < ndigits; ++i) {digits[i] = d[i];}
}BigInt::BigInt(const char* digitString) {size_t n = strlen(digitString);if (n != 0) {ndigits = n;digits = new char[n];for (int i = 0; i < n; ++i) {digits[i] = digitString[n - 1 - i] - '0';}}else {ndigits = 1;digits = new char[ndigits];digits[0] = 0;}
}BigInt BigInt::operator+(const BigInt& n) const {size_t maxDigits = max(ndigits, n.ndigits) + 1;char carry = 0;char* sumPtr = new char[maxDigits];BigInt sum(sumPtr, maxDigits);for (int i = 0; i < max(ndigits, n.ndigits); ++i) {*sumPtr = carry;if (i < ndigits) {char tmp = digits[i];*sumPtr += digits[i];tmp = *sumPtr;int a = 0;}if (i < n.ndigits) {char tmp = digits[i];*sumPtr += n.digits[i];tmp = *sumPtr;int a = 0;}if (*sumPtr >= 10) {carry = 1;*sumPtr -= 10;}else {carry = 0;}++sumPtr;}if (carry > 0) {*sumPtr = carry;}else {sum.ndigits = max(ndigits, n.ndigits);}return sum;
}void test() {clock_t start = clock();BigInt b(10);for (int i = 1; i <= 1; ++i) {b = b + 1;}b.print();clock_t end = clock();cout << endl << static_cast<double>(end - start) / CLOCKS_PER_SEC << endl;
}int main(int argc, _TCHAR* argv[])
{test();_CrtDumpMemoryLeaks();cin.get();return 0;
}

这篇关于BigInt的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/237768

相关文章

实战经验:升级主键类型为 BigInt 的应用程序兼容性保证文章:

在数据库设计和应用开发中,主键的类型选择至关重要。当需要处理更大数据量或提升数据完整性时,将主键类型从其他类型升级为 BigInt 是一种常见做法。然而,这可能会导致应用程序的兼容性问题。以下是确保应用程序完美兼容的一些实战经验。 文档记录: 在开始升级之前,确保详细记录当前主键的数据类型和任何相关的应用逻辑。这将帮助理解升级可能带来的影响,并制定相应的兼容性策略。 测试计划: 制定一

decimal,float,double,bigint

浮点类型在存储同样范围的值时,通常比decimal使用更少的空间. float使用4个字节存储 . double占用8个字节,相比float有更高的精度和更大的范围.和整数类型一样,能选择的只是存储类型, MySQL使用double作为内部浮点计算的类型 因为需要额外的空间和计算开销,所以应该尽量只在对小数进行精确计算时才使用---例如存储财务数据. 但在数据量比较大的时候,可以考虑

typescript中的BigInt,展开运算符,解构和可选链运算

BigInt,展开运算符,解构和可选链运算 BigInt javascript中支持两种数据类型, Number类型和BigInt类型。 JavaScript的七种原始数据类型,Undefined,Null,Boolean,String,Symbol,Number,BigInt JavaScript使用双精度64位浮点数格式来表示Number类型的值,Number类型能够安全的表示最大的整数,

手机号是用bigint还是用varchar存储

1、数字类型存储范围 bigint 从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。存储大小为 8 个字节。 19位数字 对于无符号 BIGINT 类型,取值范围为 0 到 18446744073709551615。20位数字。 int 一个正常大小整数。有符号的范围是-2^31 (-2,1

[MySQL]mysql中int、bigint、smallint 和 tinyint的区别和存储的范围

部门中有个字段存储的是十进制数字 , 但是表示的意思是转成二进制后 ,每一个位代表不同功能的开关状态 当超过32个功能开关的时候 , 就需要将int类型转换成bigint类型 , 原因就是int只能存储4个字节也就是2的32次方的整型值 , 装不下了, 下面就是具体的存的范围 bigint从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854

ES11 新增方法:Dynamic Import()、BigInt、globalThis、可选链(?.)、空值合并运算符

目录 Dynamic Import() 动态导入 BigInt 表示任意精度的整数 globalThis 全局作用域中的 this 可选链 Optional chaining ?. 空值合并运算符 ?? Dynamic Import() 动态导入 在使用 webpack 打包的时候,按需加载的文件会打包成一个一个小模块当异步加载组件较多会生成多个单文件,对于前端性能而言,虽然每个

关于js的BigInt的使用与注意事项

说明 BigInt是一种内置对象,提供了一种方法来表示大于2^53 - 1 的整数,2^53 - 1 为Number可以表示的最大数字,BigInt可以突破限制,可以用任意精度表示整数,超出Number的安全整数限制,也可以安全地存储和操作大整数。chrome 67+开始支持使用。 注意:当使用BigInt时,带小数的运算会被取整 使用方式 在一个整数字面量后面加n来定义一个BigInt,如

百练oj:最佳加法表达式,超过了long long范围,用自定义Bigint类解决

题目链接:http://cxsjsxmooc.openjudge.cn/2021t2summer/014/ 按照老师的思路写了代码,思路详见代码注释 #include <bits/stdc++.h>#define mem(a, n) memset(a, n, sizeof(a))#define max_len 52 //bigint类中最多储存位数+1using namespace std

sql中的int、bigint、smallint和tinyint四种数据类型

1、bigint:从-2^63(-9223372036854775808)到2^63-1(9223372036854775807) 的整型数据(所有数字),存储大小为8个字节。 2、int:从-2^31(-2147483648)到2^31-1(2147483647)的整型数据(所有数字)。存储为4个字节。 3、smallint:从-2^15(-32768)到2^15-1(32767)的整型数据

mysql中int(a)、bigint(20)中括号里的数字含义?

一开始我以为int(a),bigint(20)括号中的数字是限制存储的长度,和char(50)一样 这是错误的! 实际上,对于int,bigint来说,无论括号中的数字是多少,都不会影响这个字段存储的最大长度 括号中的数字表示的是显示的最低位数,填充的字符长度小于括号中的值时,会自动填充, 举个栗子: partner_id int(11) zerofill NOT NULL COMMENT ‘’;