超长整数运算(大数运算)
2014-07-10 21:31
225 查看
说明基于记忆体的有效运用,程式语言中规定了各种不同的资料型态,也因此变数所可以表达的最大整数受到限制,例如123456789123456789这样的整数就不可能储存在long变数中(例如C/C++等),我们称这为long数,或俗称大数运算。
解法一个变数无法表示超长整数,则就使用多个变数,当然这使用阵列最为方便,假设程序语言的最大资料型态可以储存至65535的数好了,为了计算方便及符合使用十进位制的习惯,让每一个阵列元素可以储存四个位数,也就是0到9999的数。
解法一个变数无法表示超长整数,则就使用多个变数,当然这使用阵列最为方便,假设程序语言的最大资料型态可以储存至65535的数好了,为了计算方便及符合使用十进位制的习惯,让每一个阵列元素可以储存四个位数,也就是0到9999的数。
void add(int *a, int *b, int *c) { int i, carry = 0; for(i = N - 1; i >= 0; i--) { c[i] = a[i] + b[i] + carry; if(c[i] < 10000) carry = 0; else { // 进位 c[i] = c[i] - 10000; carry = 1; } } } void sub(int *a, int *b, int *c) { int i, borrow = 0; for(i = N - 1; i >= 0; i--) { c[i] = a[i] - b[i] - borrow; if(c[i] >= 0) borrow = 0; else { // 借位 c[i] = c[i] + 10000; borrow = 1; } } } void mul(int *a, int b, int *c) { // b 为乘数 int i, tmp, carry = 0; for(i = N - 1; i >=0; i--) { tmp = a[i] * b + carry; c[i] = tmp % 10000; carry = tmp / 10000; } } void div(int *a, int b, int *c) { // b 为除数 int i, tmp, remain = 0; for(i = 0; i < N; i++) { tmp = a[i] + remain; c[i] = tmp / b; remain = (tmp % b) * 10000; } }
相关文章推荐
- 超长整数运算(大数运算)(算法)
- 7 超长整数运算(大数运算)
- 对超长整数运算(大数运算)的算法探究
- Algorithm Gossip (16) 超长整数运算(大数运算)
- Qt使用第三方库GMP,用以超长整数运算
- 基于delphi的超长整数四则运算的实现
- 九度OJ 1119:Integer Inquiry(整数相加) (大数运算)
- 九度OJ 1119:Integer Inquiry(整数相加) (大数运算)
- 大整数乘法,学数据结构之后对于小学期大数运算的改进
- 大数对整数的相除、取模、相乘运算
- 超长整数的基础运算 算法实现之加、减篇
- 大一下期末考试 : 大数存储 超长整数的加法
- 超长整数的基础运算 问题提出篇
- 九度OJ 1190:大整数排序 (大数运算、排序)
- 九度OJ 1125:大整数的因子 (大数运算)
- 九度OJ 1190:大整数排序 (大数运算、排序)
- 超长整数的基础运算 算法实现之准备篇
- Algorithm Gossip: 超长整数计算(大数计算)
- 九度OJ 1125:大整数的因子 (大数运算)
- 大数运算(超长整数运算)算法的简单分析