Little Boxes

可以用高精度做。如果会Java也可以直接用大整数。
这里记录一下队友的神奇想法:
abcd之和最大值为264,而ull最大为264-1,所以可以先-1,用ull做加法,再+1;

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
#define pb push_back
#define fi first
#define se second
#define mem(a,x) memset(a,x,sizeof(a));
#define db double 
#define fir(i,a,n) for(int i=a;i<=n;i++)
#define debug(x) cout<<#x<<" "<<x<<endl;
const int inf=0x3f3f3f3f;
const int MOD=1e9+7;
//======================
const int N=2e5+10;
string anss;
string ulltostring(ull a)
{
	string ans;
	while(a)
	{
		ans+=(a%10)+'0';
		a/=10;
	}
	string ans1;
	for(int i=ans.size()-1;i>=0;i--)
	{
		ans1+=ans[i];
	}
	return ans1;
}
int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		ull a,b,c,d;cin>>a>>b>>c>>d;
		int flag=0;
		if(a) 
		{
			a-=1;flag++;
		}
		else if(b)
		{
			b-=1;flag++;
		}
		else if(c)
		{
			c-=1;flag++;
		}
		else if(d)
		{
			d-=1;flag++;
		}
		
		if(!flag)
		{
			cout<<0<<endl;continue;
		}
		
		ull ans=a+b+c+d;
		string temp=ulltostring(ans);
		//+1
		int flag1=0;
		for(int i=temp.size()-1;i>=0;i--)
		{
			if(temp[i]<='8'&&temp[i]>='0')
			{
				temp[i]++;flag1++;
				temp[i+1]='0';
				break;
			}
		}
		if(!flag1)//没加到 只可能是全都是9 
		{
			int len=temp.size();//有len个9
			temp="1";
			for(int i=0;i<len;i++)
			{
				temp+="0";
			} 
		}
		cout<<temp<<endl;
	}
	
	return 0; 
}
上一篇:5V转1.2V简单外围LDO和降压IC


下一篇:【算法学习】1769. 移动所有球到每个盒子所需的最小操作数(java / c / c++ / python / go / rust)