题目详情:
给定一个带通配符问号的数W,问号可以代表任意一个一位数字。
再给定一个整数X,和W具有同样的长度。
问有多少个整数符合W的形式并且比X大?
输入格式
多组数据,每组数据两行,第一行是W,第二行是X,它们长度相同。在[1..10]之间.
输出格式
每行一个整数表示结果。
答题说明:
输入样例
36?1?8
236428
8?3
910
?
5
输出样例
100
0
4
我的事例代码:
#include <stdio.h>
#include <string.h>
int calculate(char W[], char X[], int length) {
int w,x;
int i, j, n, temp = 0;
for(i = 0; i < length; i++) {
w = W[i];
x = X[i];
if(w != '?') {
if(i == 0) {
if(w - '0' > x - '0') {
n = 1;
for(j = i + 1; j < length; j++) {
w = W[j];
if(w == '?') {
n *= 10;
}
}
return n;
} else if(w - '0' < x - '0') {
return 0;
} else {
continue;
}
}else {
if(w - '0' >= x - '0') {
for(j = i + 1; j < length; j++) {
w = W[j];
if(w == '?') {
break;
}
}
if(j == length) {
break;
}
continue;
} else if(w - '0' < x - '0') {
break;
}
}
} else {
n = 9 - (x - '0');
for(j = i + 1; j < length; j++) {
w = W[j];
if(w == '?') {
n *= 10;
}
}
temp += n;
}
}
return temp;
}
void main() {
/*char W[10];
char X[10];
int wLen;
bool flag = true;
while(flag) {
printf("请输入W:\n");
scanf("%s", &W);
printf("请输入X:\n");
scanf("%s", &X);
wLen = strlen(W);
if(wLen != strlen(X)) {
printf("长度不一致,请重新输入!\n");
} else {
flag = false;
}
}*/
printf("%d\n", calculate("36?1?8", "236428", 6));
printf("%d\n", calculate("8?3", "910", 3));
printf("%d\n", calculate("?", "5", 1));
}