2016-11-26 70 views
0

我刚刚开始涉足编码问题,并且遇到了几天来我一直无法解决的问题,而且我遇到过最接近的问题能够在网上找到是一个程序检查一个数字是否包含一个特定的数字,但这并不适用于我的情况,我不认为。问题是让用户输入两个正数,并检查第二个数字的反转是否包含在第一个数字中。例如,如果输入654321和345,就会说它包含它,因为345的反向是543,而654321包含它。这是我一直在尝试的,但这是一场灾难。检查是否包含其他数字的程序

P.S:变量应该保持整数通过程序。

#include <iostream> 
using namespace std; 
bool check(int longer, int shorter) 
{ 
    int i = 1; 
    int rev=0; 
    int digit; 
    while (shorter > 0) 
    { 
     digit = shorter%10; 
     rev = rev*10 + digit; 
     shorter = shorter/10; 
    } 
    cout << rev << endl; 
    bool win=0; 
    int left = longer/10;    //54321 
    int right = longer % 10;   // 65432 
    int middle = (longer /10)%10;  // 5432 
    int middle1; 
    int middle2; 
    int trueorfalse = 0; 
    while (left > 0 && right > 0 && middle1 > 0 && middle2 >0) 
    { 
     left = longer/10;  //4321 //321 
     right = longer % 10;  //6543 //654 
     middle1 = middle%10;  //543 
     middle2= middle/10;   //432 
     if (rev == left || rev == right || rev == middle1 || rev == middle2 || rev == middle) 
     { 
      win = true; 
     } 
     else 
     { 
      win = false; 
     } 
    } 
    return win; 
} 


int main() 
{ 
    int longer; 
    int shorter; 
    int winorno; 
    cout << "Please enter two numbers, first of which is longer: "; 
    cin >> longer; 
    cin >> shorter; 
    winorno = check(longer,shorter); 
    if (winorno==true) 
    { 
     cout << "It works."; 
    } 
    else 
    { 
     cout << "It doesn't work."; 
    } 

    return 0; 
} 
+0

什么这些数字21和120? 21是否包含120? –

回答

1

你overthink管道越多,就越容易 停止沥干。 - Scotty,Star Trek III。

  1. 反转位数的整数

如果分割为两个部分此任务此变得更加容易。

  • 搜索由第一部分计算的反转整数的第二个整数。

  • 对于第一部分,假设n包含要反转的数字。

    int modulo=1; 
    int reversed_n=0; 
    
    do 
    { 
        reversed_n = reversed_n * 10 + (n % 10); 
        modulo *= 10; 
    } while ((n /= 10) != 0); 
    

    最终的结果是,如果n包含345 reversed_n将结束543,和modulo为1000。我们需要为modulo第二部分。

    这种方式构建循环的原因是故意的。如果原来的数是0,我们希望与reversed_n也为0清盘,并modulo为10

    而现在,我们可以采取类似的方法来寻找第二个号码,被叫search,是否含有reversed_n

    for (;;) 
    { 
        if ((search % modulo) == reversed_n) 
        { 
         std::cout << "Yes" << std::endl; 
         return 0; 
        } 
    
        if (search < modulo) 
         break; 
    
        search /= 10; 
    } 
    
    std::cout << "No" << std::endl; 
    

    完整的程序:

    #include <iostream> 
    
    int main() 
    { 
        int search=654321; 
        int n=345; 
    
        int modulo=1; 
        int reversed_n=0; 
    
        do 
        { 
         reversed_n = reversed_n * 10 + (n % 10); 
         modulo *= 10; 
        } while ((n /= 10) != 0); 
    
    
        for (;;) 
        { 
         if ((search % modulo) == reversed_n) 
         { 
          std::cout << "Yes" << std::endl; 
          return 0; 
         } 
    
         if (search < modulo) 
          break; 
         search /= 10; 
        } 
    
        std::cout << "No" << std::endl; 
        return 0; 
    } 
    
    0
    #include <iostream> 
    #include <cmath> 
    using namespace std; 
    
    int calculateNumLength(int num){ 
        int length = 0; 
        while (num > 0) { 
         num = num/10; 
         length++; 
        } 
        return length; 
    } 
    
    bool check(int longer, int shorter){ 
    
        int reversed = 0; 
        int digit; 
        int shortLength = calculateNumLength(shorter); 
        int longLength = calculateNumLength(longer); 
        int diffrence = longLength - shortLength; 
        int possibleValues = diffrence + 1; 
        int possibleNums[possibleValues]; 
    
        while (shorter > 0) { 
         digit = shorter % 10; 
         rev = (rev * 10) + digit; 
         shorter = shorter/10; 
        } 
    
        int backstrip = pow(10, diffrence); 
        int frontstrip = pow(10, longLength-1); 
        int arrayCounter = 0; 
        while (longer > 0){ 
         possibleNums[arrayCounter++] = longer/backstrip; 
         if (backstrip >= 10){ 
          backstrip = backstrip/10; 
         }else{ 
          break; 
         } 
         longer = longer % frontstrip; 
         frontstrip = frontstrip/10; 
        } 
        for (int i=0;i<possibleValues;i++){ 
         if (possibleNums[i] == rev){ 
          return true; 
         } 
        } 
        return false; 
    } 
    
    int main() { 
        std::cout << check(654321,123) << std::endl; 
        return 0; 
    } 
    
    相关问题