计算机存储数据是按照类型分配空间的,一般整形为两个字节范围在-32768~32767之间,长整形为4个字节32位,其范围在-2147483648~2147483647.现在我们利用数组来计算高精度数据(值超过长整形的范围):
例如:高精度数据*长整数
算法如下:
#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[n]=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位
版权声明:本文为博主原创文章,未经博主允许不得转载。