大整数的乘法运算
2015-09-15 23:31
141 查看
计算机存储数据是按照类型分配空间的,一般整形为两个字节范围在-32768~32767之间,长整形为4个字节32位,其范围在-2147483648~2147483647.现在我们利用数组来计算高精度数据(值超过长整形的范围):
例如:高精度数据*长整数
算法如下:
编程求 n<=100时,n!的准确值。
为节省空间,采用的是长整形数组,每个数组元素存6位
例如:高精度数据*长整数
算法如下:
#include <iostream> #include<string.h> using namespace std; int main() { long b,c,d; int a[256],n; char str[256]; printf("Input a great number:"); scanf("%s",str); printf("input a long integer number:"); scanf("%ld",&c); d=0; n=strlen(str); //计算前面n位数的值 for(int i=0,j=n-1;i<n;i++,j--) { b=(str[j]-48)*c+d; a[i]=b%10; d=b/10; } //保存后面高位数据 while(d) { a =d%10; d=d/10; n++; } for(int i=n-1;i>=0;i--) printf("%d",a[i]); return 0; }
编程求 n<=100时,n!的准确值。
#include <iostream> using namespace std; int main() { long a[256], b, c, d; int m = 1, i, j,n,r; scanf("%d", &n); d = 0; a[1] = 1; for(i = 2; i <= n; i++) { for(j = 1; j <= m; j++) { c = a[j] * i + d; a[j] = c % 1000000; d = c / 1000000; } if(d) { a[j]=d; ++m; } } printf("%d!=",n); for(i=m;i>=1;i--) { if(a[i]==0) continue; else { r=i; break; } } printf("%ld",a[r]); for(i=r-1;i>=1;i--) { if(a[i]>99999) printf("%ld",a[i]); else if(a[i]>9999) printf("0%ld",a[i]); else if(a[i]>999) printf("00%ld",a[i]); else if(a[i]>99) printf("000%ld",a[i]); else if(a[i]>9) printf("00000%ld",a[i]); else printf("00000ld",a[i]); } return 0; }
为节省空间,采用的是长整形数组,每个数组元素存6位
相关文章推荐
- rails学习笔记:维护商品信息任务B
- php发送get、post请求的几种方法
- IDEA 14 快捷键
- Yii框架relations的使用
- 欢迎使用CSDN-markdown编辑器
- 【Machine Learning in Action --2】K-最近邻分类
- 百度竞价从入门到精通
- DP:Cow Bowling(POJ 3176)
- 移动应用平台的开发环境的发展演变-elcipse与android studio
- 加密学原理及openssl,私有CA搭建
- BlackBerry Java 开发环境搭建及插件安装
- 的撒示范点
- 帮网友写的一个SQL(连续区间合并)
- Linux:文件权限
- 各种距离
- linux command
- win8专业版激活---遇到的问题
- Oracle中PL/SQL的执行部分和各种流程控制
- JSON前台与后台的交互
- Restful与soap