繁體
|
簡體
Sclub交友聊天~加入聊天室當版主
(檢舉)
分享
新浪微博
QQ空间
人人网
腾讯微博
Facebook
Google+
Plurk
Twitter
Line
標題:
c++大數階層計算/large factorial
[打印本頁]
作者:
Smallcat
時間:
2019-12-5 17:16
標題:
c++大數階層計算/large factorial
#include<iostream>
using namespace std;
//目前極限是1142!(2998個位數)
#define MAX 1000
int multiply(int x, int res[], int res2[], int res3[], int res_size);
void factorial(int n)
{
int res[MAX],res2[MAX],res3[MAX];
string s;
res[0] = 1;
int size = 1;
for (int x=2; x<=n; x++)
size = multiply(x, res, res2, res3, size);
if(size>2000){
for (int i=size-1-2000; i>=0; i--)
s += res3[i]+'0';
for (int i=2000-1-1000; i>=0; i--)
s += res2[i]+'0';
for (int i=1000-1; i>=0; i--)
s += res[i]+'0';
}
if(size>1000 && size<=2000){
for (int i=size-1-1000; i>=0; i--)
cout << res2[i];
for (int i=1000-1; i>=0; i--)
cout << res[i];
}
if(size<=1000){
for (int i=size-1; i>=0; i--)
s += res[i]+'0';
}
cout << "size:" << size << endl;
cout << s << endl;
}
int multiply(int x, int res[], int res2[], int res3[], int res_size)
{
int carry = 0;
if(res_size<=1000){
for (int i=0; i<res_size; i++)
{
int prod = res[i] * x + carry;
res[i] = prod % 10;
carry = prod/10;
}
}else if(res_size<2000){
for (int i=0; i<1000; i++)
{
int prod = res[i] * x + carry;
res[i] = prod % 10;
carry = prod/10;
}
for (int i=0; i<res_size-1000; i++)
{
int prod = res2[i] * x + carry;
res2[i] = prod % 10;
carry = prod/10;
}
}else{
for (int i=0; i<1000; i++)
{
int prod = res[i] * x + carry;
res[i] = prod % 10;
carry = prod/10;
}
for (int i=0; i<1000; i++)
{
int prod = res2[i] * x + carry;
res2[i] = prod % 10;
carry = prod/10;
}
for (int i=0; i<res_size-2000; i++)
{
int prod = res3[i] * x + carry;
res3[i] = prod % 10;
carry = prod/10;
}
}
while (carry)
{
if(res_size<1000){
res[res_size] = carry%10;
carry = carry/10;
}else if(res_size<2000){
res2[res_size-1000] = carry%10;
carry = carry/10;
}else{
res3[res_size-2000] = carry%10;
carry = carry/10;
}
res_size++;
}
return res_size;
}
int main()
{
int a;
for(int i=0;i<10;i++){
for(int j=0;j<10;j++){
cout<<j;
}
}
cout<<endl;
while(1){
cin>>a;
factorial(a);
}
return 0;
}
複製代碼
歡迎光臨 小貓貓大聯盟!幻與想的境界\(0w0)/ (http://smallcat.utmall.com/)
Powered by Discuz! 7.2