首页 > 其他分享 >Carrying Conundrum

Carrying Conundrum

时间:2022-10-05 14:23:50浏览次数:55  
标签:10 num1 num2 Conundrum s2 s1 int Carrying

传送门

题意:
按照他给定的加法规则,隔以为才 + 1,给出相加后的结果,求有多少中方法能够选择,构成n, 其中选择的两个数都必须是正数


思路:
通过观察能够发现,相邻两位是没有影响的,所以把给定的数可以拆分成两部分,对于每一个部分相当于普通的加法规则能够有多少种选择,在讨论的时候把0的情况也讨论进去,最后肯定是全部组合,但是a = 0, b != 0, a != 0, b = 0, 这种情况也是存在的,所以,最后的答案就是所有的情况 - 2即可


总结:
对数据进行拆解,来观察规律,转换成可以处理的方式

点击查看代码
#include <bits/stdc++.h>
#define endl '\n'
#define IOS ios::sync_with_stdio(false);
using namespace std;

typedef long long ll;

int T, n;

int main()
{
	IOS; cin.tie(0), cout.tie(0);
	cin >> T;
	while (T--)
	{
		cin >> n;
		int count = 1;
		string s1 = "", s2 = "";
		while (n)
		{
			int num = n % 10;
			if (count & 1)
				s1 += to_string(num);
			else
				s2 += to_string(num);
			++count;
			n /= 10;
		}
		reverse(s1.begin(), s1.end()), reverse(s2.begin(), s2.end());
		int num1 = 0, num2 = 0;
		for (int i = 0; i < s1.size(); ++i)
			num1 = num1 * 10 + (s1[i] - '0');
		for (int i = 0; i < s2.size(); ++i)
			num2 = num2 * 10 + (s2[i] - '0');
		ll ans = 1ll * (num1 + 1) * (num2 + 1) - 2;
		cout << ans << endl;
	}
	return 0;
}

标签:10,num1,num2,Conundrum,s2,s1,int,Carrying
From: https://www.cnblogs.com/jumo-xiao/p/16755510.html

相关文章