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

来源:互联网 发布:梦想的声音 知乎 编辑:程序博客网 时间:2024/04/30 07:53

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

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

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

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

}