现在小苯只记得这个式子的结果
请你帮小苯数一数,总共有多少个不同的符合条件的这种式子呢。
(注意:
都是不含前导零的。)
输入包含一行两个正整数。分别表示计算式的长度,以及计算式的结果值。
输出一行一个整数,表示不同的符合条件的计算式个数。
5 2
3
长度为 5 的,运算结果为 2 的,只包含非负整数的不同运算式有:
0+2=2
1+1=2
2+0=2
这三个。
小苯认为两个计算式不同:当且仅当
长度不相同,或两者长度相同均为
时,存在一个
,使得
。
#include <iostream>
int get_num_len(int num)
{
int res = 1;
while(num/10)
{
res += 1;
num /= 10;
}
return res;
}
int main()
{
int n = 0,c = 0;
std::cin>>n>>c;
int c_len = get_num_len(c);
int ans = 0;
for(int i = 0;i <= c/2;++i)
{
int a = i,b = c-i;
int a_len = get_num_len(a);
int b_len = get_num_len(b);
if(a_len + b_len == n - c_len - 2)
{
if(a != b)
{
ans += 2;
}
else
{
ans += 1;
}
}
}
std::cout<<ans;
} 新手向暴力解法,注意 0 的位数也是 1 哦,所以用 do while 循环。
#include <iostream>
using namespace std;
int calc(int x) {
int ret = 0;
do {
ret++;
x /= 10;
} while(x);
return ret;
}
int main() {
int n, c; cin >> n >> c;
int ans = 0, t = calc(c);
for(int i = 0; i <= c; i++) {
//cerr << calc(i) << " " << calc(c - i) << " " << t << endl;
if(calc(i) + calc(c - i) + t == n - 2) ans++;
}
cout << ans << endl;
return 0;
}