题意:
按照他给定的加法规则,隔以为才 + 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;
}