大整数の乗算
2141 ワード
コンピュータ記憶データはタイプ別に空間を割り当てるもので、一般的には2バイトの範囲が-32768~32767の間に整形され、長整形は4バイト32ビットであり、その範囲は-21748483648~21748483647である.次に、配列を使用して、高精度データ(長整形の範囲を超える値)を計算します.
例:高精度データ*長整数
アルゴリズムは次のとおりです.
プログラミングは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[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ビット保存します.