em...神奇的高精度50分
  • 板块P1805 关灯
  • 楼主Laisira
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/19 17:27
  • 上次更新2024/8/19 20:09:35
查看原帖
em...神奇的高精度50分
983519
Laisira楼主2024/8/19 17:27
#include<bits/stdc++.h>
using namespace std;
namespace GJD {
	void add(int s[],int t[],int &tot,int cnt) {
		for(int i=1;i<=max(tot,cnt);i++)
			s[i] = s[i] + t[i];
		for(int i=1;i<=max(tot,cnt);i++) {
			s[i+1] += s[i]/10;
			s[i] = s[i]%10;
		} while(s[tot+1] > 0)tot++;
	}
	void jian(int s[],int t[],int &tot,int cnt) {
		for(int i=1;i<=max(tot,cnt);i++)
			s[i] = s[i] - t[i];
		for(int i=1;i<=tot;i++) {
			while(s[i] < 0)s[i+1] --,s[i] += 10;
		} while(s[tot] == 0&&tot)tot--;
	}
}
using namespace GJD;
int ans[10005],ksm[10005],tot = 1,cnt = 1,p[10000];
void solve() {
	int cnt1 = cnt;
	for(int i=1;i<=cnt;i++)
		p[i] = ans[i];
	add(p,p,cnt1,cnt1);
	ksm[1]--,add(ans,ksm,cnt,tot),ksm[1]++;
	jian(ans,p,cnt,cnt1);
}
int main()
{
	ksm[1] = 1;
	int n; cin>>n;
	for(int i=1;i<=n;i++) {
		int opt; cin>>opt;
		add(ksm,ksm,tot,tot);
		if(opt == 1)solve();
	} while(cnt)cout<<ans[cnt--];
	return 0;
 } 
2024/8/19 17:27
加载中...