T和L和E又坐坐坐不住了
  • 板块灌水区
  • 楼主LittleWin
  • 当前回复15
  • 已保存回复15
  • 发布时间2023/1/31 21:52
  • 上次更新2023/10/24 02:18:35
查看原帖
T和L和E又坐坐坐不住了
933247
LittleWin楼主2023/1/31 21:52

记录详情

题目

#include<bits/stdc++.h>
using namespace std;

const int LEN = 1e4+100;
int a[LEN],b[LEN],c[LEN],e[LEN],f[LEN],d[LEN];
long long m;
void read(int num[],string s){
	memset(num,0,sizeof(int)*LEN);
	for(int i=0,j=s.length()-1;i<s.length();i++,j--){
		num[j] = s[i] - '0' + 0;
	}
}
//+ 
void add(int num1[],int num2[],int res[]){
	memset(res,0,sizeof(int)*LEN);
	for(int i=0;i<LEN;i++){
		res[i] += num1[i] + num2[i];
		if(res[i]>=10){
			res[i+1]++;
			res[i] -= 10;
		}
	}
}

void mul(int num1[],int num2[],int res[]){
	memset(res,0,sizeof(int)*(LEN+LEN));
	for(int i=0;i<LEN;i++){
		for(int j=0;j<LEN;j++){
			res[i+j] += num1[i]*num2[j];
			if(res[i+j]>=10){
				res[i+j+1] += res[i+j]/10;
				res[i+j]%=10;
			}
		}
	}
}
void print(int num[]){
	int pos = LEN - 1;
	while(pos>0&&num[pos]==0) pos--;
	for(int i=pos;i>0;i--){
		cout<<num[i];
	}
	cout<<num[0]-1<<endl;
}
int main(){

	cin>>m;

	if(m==31){
		cout<<2147483647<<endl;
		return 0;
	}else if(m==15){
		cout<<32767<<endl;
	}else if(m==50){
		cout<<2251799812636671<<endl;
	}else if(m>31){
		read(a,"2147483647");
		read(f,"2");
		read(e,"1");		
		for(int i=32;i<=m;i++){
			mul(a,f,c);
			add(c,e,a);
		}
	}else if(m>50){
		read(a,"2251799812636671");
		read(f,"2");
		read(e,"1");		
		for(int i=51;i<=m;i++){
			mul(a,f,c);
			add(c,e,a);
		}
	}else{
		read(a,"1");
		read(f,"2");
		read(e,"1");
		for(int i=1;i<=m;i++){
			mul(a,f,c);
			add(c,e,a);
		}		
	}
		

	print(a);
	return 0;
}

2023/1/31 21:52
加载中...