给定一个带通配符问号的数W,问号可以代表任意一个一位数字。
再给定一个整数X,和W具有同样的长度。
问有多少个整数符合W的形式并且比X大?
输入格式
多组数据,每组数据两行,第一行是W,第二行是X,它们长度相同。在[1..10]之间.
输出格式
每行一个整数表示结果。
答题说明:
输入样例
36?1?8
236428
8?3
910
?
5
输出样例
100
0
再给定一个整数X,和W具有同样的长度。
问有多少个整数符合W的形式并且比X大?
输入格式
多组数据,每组数据两行,第一行是W,第二行是X,它们长度相同。在[1..10]之间.
输出格式
每行一个整数表示结果。
答题说明:
输入样例
36?1?8
236428
8?3
910
?
5
输出样例
100
0
4
import java.util.Scanner;
//w s
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
String w = sc.nextLine();
String s = sc.nextLine();
char[] chw = w.toCharArray();
char[] chs = s.toCharArray();
long count = 0;
//依次比较每一个字符的大小
for (int i = 0; i < w.length(); i++) {
//如果出现通配符则计算在此处的符合条件的种数
if (chw[i] == '?') {
int t = '9' - chs[i];
int r = 0;
int j = i + 1;
while ((j = w.indexOf('?', j)) != -1) {
r++;
j++;
}
count += Math.pow(10, r) * t;
}
//如果不是通配符,则比较常规字符的大小
else {
//若大于,则无论后面通配符填什么数都成立
if (chw[i] > chs[i]) {
int r = 0;
int j = i + 1;
while ((j = w.indexOf('?', j)) != -1) {
r++;
j++;
}
count += Math.pow(10, r);
break;
}
//若小于,则无论后面通配符填什么数都不成立
else if (chw[i] < chs[i]) {
break;
}
//若等于,则继续循环
}
}
System.out.println(count);
}
}
}