纯模拟加高精会T 4个点
正常高精度存的数是一位一位的存储
“100035”
[1][0][0][0][3][5]
由于数据太大处理的时间会变长,并且每个数组元素的大小有浪费,所以我们可以在一个数组元素中存储多个数字
[100][035]
这样既节省了时间又压缩了空间
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
long long a[10000] = {1,1};//初始化不要忘
int n;
void print(long long a[]){//打印函数
a[1] = a[1] - 1;
int i;
int ans = 0;
for(i = 500; i >= 1; --i){
if(i <= a[0])cout << a[i];
else{
cout << 0;
}
ans++;
if(ans % 50 == 0)cout << endl;
}
return ;
}
void jiecheng(long long a[],long long x){//阶乘函数(直接拿之前阶乘的板子改的
int i;
for(i = 1;i <= 500; ++i){
a[i] = a[i] * x;
}
for(i = 1; i <= 500; ++i){
a[i+1] += a[i] / 10;
a[i] = a[i] % 10;
}
}
int main(){
cin >> n;
int i;
a[0] = 1;
a[1] = 1;
int n1 = n / 50;
int n2 = n % 50;
long long up = pow(2,50);//将数据压缩
long long up1 = pow(2,n2);
for(i = 1; i <= n1; ++i)jiecheng(a,up);
jiecheng(a,up1);
cout << (int)(log10(2)*n+1) << endl;
a[0] = (int)(log10(2)*n+1);
print(a);
return 0;
}