阶乘嵌套的两个数进行比较, eg. 50!!!!!! 85!!!!

这个是百度的一道面试题目好像。

我的思路是,将其中一个数的!去掉,即拿掉两个字符串中相等的!部分:

完整的实例如下,希望别人还有更加好的算法,请指正:

#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!") );

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值