题目描述:
题目解读:
给一个可能带‘?’的字符串,?可替换成0-9中的任意数,但当?在首位时不能替换为0.问有多少数可以和它相匹配。
0,01,02,03,0999,都直接输出0种;
?有1-9匹配,共9种;
??则有10-99可以和其匹配,共90种;
1?有10-19匹配,共10种;
1??9有1009-1999匹配,共100种。
解题思路:
首先如果s[0]为0,直接输出0即可。
然后统计有多少个问号,按说每有一个问号,数量扩充10倍。
存在特殊情况s[0]为问号,则数量只能扩充9倍(不能取0)。
代码实现:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include<iostream>
using namespace std;
void Solve() {
string s;
cin >> s;
int ans = 1;
if (s[0] == '0') {
printf("0\n");
}
else {
for (int i = 0; i < s.length(); i++) {
if (s[i] == '?') ans *= 10;
}
if (s[0] == '?') ans = ans / 10 * 9;
printf("%d\n", ans);
}
return;
}
int main() {
int t;
scanf("%d", &t);
while (t--) Solve();
return 0;
}
遇到的错误: