过大数据处理
来源:互联网 发布:购金蝶软件会计分录 编辑:程序博客网 时间:2024/04/29 20:37
遇到无法用当前数据类型表示的数的时候,利用数组进行处理,按四位数一个单元保存数值
struct bigInteger { //高精度整数结构体int digit[maxDigits];int size;void init() { //初始化for (int i = 0; i < maxDigits; i++) digit[i] = 0;size = 0;}void set(int x) { //用一个普通整数初始化高精度整数init();do {digit[size++] = x % 10000;x /= 10000;} while (x != 0);}void output() { //输出for (int i = size - 1; i >= 0; i--) {if (i != size - 1) printf("%04d", digit[i]);else printf("%d", digit[i]);}printf("\n");}bigInteger operator * (int x) const { //高精度整数与普通整数的乘积bigInteger ret;ret.init();int carry = 0;for (int i = 0; i < size; i++) {int tmp = x * digit[i] + carry;carry = tmp / 10000;tmp %= 10000;ret.digit[ret.size++] = tmp;}if (carry != 0) {ret.digit[ret.size++] = carry;}return ret;}bigInteger operator + (const bigInteger &A) const { //高精度整数之间的加bigInteger ret;ret.init();int carry = 0;for (int i = 0; i < A.size || i < size; i++) {int tmp = A.digit[i] + digit[i] + carry;carry = tmp / 10000;tmp %= 10000;ret.digit[ret.size++] = tmp;}if (carry != 0) {ret.digit[ret.size++] = carry;}return ret;}bigInteger operator / (int x) const { //高精度整数除以普通整数bigInteger ret; //返回的高精度整数ret.init(); //返回值初始化int remainder = 0; //余数for (int i = size - 1; i >= 0; i--) { //从最高位至最低位依次完成计算int t = (remainder * 10000 + digit[i]) / x; //计算当前位数值加上高位剩余的余数的和对x求得的商int r = (remainder * 10000 + digit[i]) % x; //计算当前位数值加上高位剩余的余数的和对x求模后得的余数ret.digit[i] = t; //保存本位的值remainder = r; //保存至本位为止的余数}ret.size = 0; // 返 回 高 精 度 整 数 的 size 初 始 值 为 0, 即 当 所 有 位 数 字 都 为 0时, digit[0]代表数字0, 作为最高有效位, 高精度整数即为数字0for (int i = 0; i < maxDigits; i++) {if (digit[i] != 0) ret.size = i;} //若存在非0位,确定最高的非0位,作为最高有效位ret.size++; //最高有效位的下一位即为下一个我们不曾使用的digit数组单元,确定为size的值return ret;}int operator % (int x) const { //高精度整数对普通整数求余数int remainder = 0; //余数for (int i = size - 1; i >= 0; i--) {int t = (remainder * 10000 + digit[i]) / x;int r = (remainder * 10000 + digit[i]) % x;remainder = r;} //过程同高精度整数对普通整数求商return remainder; //返回余数}}a, b, c;
OJ:1198、1076、1080
0 0
- 过大数据处理
- 数据处理
- 数据处理
- 数据处理
- 数据处理
- 数据处理
- 数据处理
- 数据处理
- 数据处理
- 数据处理
- 数据处理
- 数据处理
- 数据处理
- 数据处理
- 数据处理
- 数据处理
- 数据处理
- uboot过大
- Android:解决DatePickerDialog只有完成按钮、没有取消按钮的问题
- Java中线程的俩种方式,编码的变体
- Java内存泄漏例子
- 怎么把excel表格转换成word格式
- Unity3d协程实现倒数计时
- 过大数据处理
- 摄像头标定
- PAT-4C-L2-006-树的遍历(DFS)
- PendingIntent
- C/C++中标准转换运算符reinterpret_cast
- 3-认识HTML标签(2)
- VS2010安装失败
- Android理解Looper、Handler、Message三者关系:
- ubuntu获取root权限