带通配符的数
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
2
-
描述
-
给定一个带通配符问号的数W,问号可以代表任意一个一位数字。再给定一个整数X,和W具有同样的长度。问有多少个整数符合W的形式并且比X大?
-
输入
-
多组测试数据。
每组数据两行。第一行代表W,第二行代表X,它们的长度相同,并且都不超过15。
输出
- 输出一行,表示满足条件的结果的个数。 样例输入
-
36?1?8 236428 8?3 910 ? 5
样例输出
-
100 0
4
-
思路:
-
数学题, 组合数学的简单应用。
-
//nyoj 985 带通配符的数 #include <stdio.h> #include <string.h> char str[20], tstr[20]; int main() { int i, len, rn; long long ten[16], ans; ten[0] = 1; for(i = 1; i < 16; i++) { ten[i] = ten[i-1]*10; } while(scanf("%s%s", str, tstr) != EOF) { len = strlen(str); rn = 0; ans = 0; for(i = 0; i < len; i++) { if(str[i] == '?') { rn++; } } for(i = 0; i < len; i++) { if(str[i] != '?') { if(str[i] > tstr[i]) //遇到大的后面不用判断 { ans += ten[rn]; break; } else if(str[i] < tstr[i]) //遇到小的后面也不用判断 { break; } } else { rn--; ans += ('9'-tstr[i])*ten[rn]; //遇到相等先把可以确定的确定, 后面同理 } } printf("%lld\n", ans); } return 0; }
-
多组测试数据。