这个是百度的一道面试题目好像。
我的思路是,将其中一个数的!去掉,即拿掉两个字符串中相等的!部分:
完整的实例如下,希望别人还有更加好的算法,请指正:
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
bool check(char *str1, char *str2){
int i = 0;
int s1_len = strlen(str1);
int s2_len = strlen(str2);
char *p = (char *)malloc(s1_len), *p1;
char *q = (char *)malloc(s2_len), *q1;
strcpy(p, str1);
strcpy(q, str2);
p1 = p;
q1 = q;
while ( (*p != '!') && (*p != '\0') ) {
i++;
p++;
}
*p = '\0';
s1_len = s1_len - i; //求出str1中!的个数
i = 0;
while ( (*q != '!') && (*q != '\0') ) {
i++;
q++;
}
*q = '\0';
s2_len = s2_len - i; //求出str2中!的个数
int num1 = atoi(p1); //转化str1中的数字部分
int num2 = atoi(q1); //转化str2中的数字部分
int x = 1, xx = 0; //xx存储阶乘得到的值,然后与另个值直接比较
if (s1_len > s2_len) {
for (int i = 1; i <= s1_len - s2_len; i++){
for (int j = 1; j <= num1; j++) {
x = x*j;
xx = x;
}
num1 = x;
x = 1;
}
return xx == num2;
}
else {
x = 1;
for (int i = 1; i <= -(s1_len - s2_len); i++){
for (int j = 1; j <= num2; j++) {
x = x*j;
xx = x;
}
num2 = x;
x = 1;
}
return xx == num1;
}
}
int main() {
bool a = check("24!!", "4!!!!");
printf("The two string %s\n", a?("equal!"):("not equal!") );
}