您的位置:首页 > 其它

大整数的乘法运算

2015-09-15 23:31 141 查看
计算机存储数据是按照类型分配空间的,一般整形为两个字节范围在-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
=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位
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: