20分求调,2AC8RE
查看原帖
20分求调,2AC8RE
1066381
Eternal_rainbow楼主2025/8/30 18:16
#include <bits/stdc++.h>
#define ll long long
#define maxn 505 
using namespace std;
struct Bigint
{
	int len,a[maxn];
	Bigint(int x = 0)
	{
		memset(a,0,sizeof(a));
		for (len = 1;x;len++)
		{
			a[len] = x % 10;
			x /= 10;
		}
		len--;
	}
	int &operator[] (int i)
	{
		return a[i];
	}
	void flatten(int l)
	{
		len = l;
		for (int i = 1;i <= len;i++)
		{
			a[i + 1] += a[i] / 10;
			a[i] %= 10; 
		}
		for (;!a[len] && len > 1;) 
		{
			len--;
		}
	}
	void print()
    {
        for (int i = 500; i >= 1; i--)
        {
            if (i > len)
            {
                cout << "0";
            }
            else
            {
                cout << a[i];
            }
            if (i % 50 == 1 && i != 1)
            {
                cout << "\n";
            }
        }
    }
};
Bigint operator+ (Bigint a,Bigint b)
{
	Bigint c;
	int len = max(a.len,b.len);
	for (int i = 1;i <= len;i++)
	{
		c[i] += a[i] + b[i];
	}
	c.flatten(len + 1);
	return c;
}
Bigint operator* (Bigint a,int b)
{
	Bigint c;
	int len = a.len;
	for (int i = 1;i <= len;i++)
	{
		c[i] = a[i] * b;
	}
	c.flatten(len + 11);
	return c;
}
Bigint operator- (Bigint a, int b)
{
    int c = b;  
    for(int i = 1; i <= a.len && c; i++)
    {
        if(a[i] >= c)
        {
            a[i] -= c;
            c = 0;
        }
        else
        {
            a[i] = a[i] + 10 - c;
            c = 1;
        }
    }
    a.flatten(a.len); 
    return a;
}
int n; 
Bigint ans = 1;
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin >> n;
	double k = n * log10(2);
    int num = (int)k + 1;
    cout << num << "\n";
    for (int i = 1;i <= n;i++)
    {
        ans = ans * 2;
    }
    ans = ans - 1;
    ans.print();
	return 0;
}

2025/8/30 18:16
加载中...