检查数字是否是Simber

时间:2015-09-04 03:30:54

标签: c++

一个simber被定义为一个正整数,其中任何奇数位(如果存在)出现奇数次,1414414是一个simber。 4是偶数,它出现四次,1是奇数,它出现3次。

以下是我的变数:

int is_simber(int n) 
{
    int numberOfTimes = 0, length = 1, x = n; 
    bool answer; 
    vector <int> nmbrs = vector <int>(); 


    //get how many digits are in the integer

    do
    { 
       x /= 10; 
       length++; 
    }
    while(x != 0) 


    //get the digits in the integer

    for(int i = 0; i<length; i++) 
    {
      nmbrs.push_back(((n/10^i) % 10); 
    }


    //checking how many times a digit occurs and also testing to see if the digits
    //meet the requirements

    for(int i = 0; i<length; i++) 
    {
        for(int j = 0; j<length; j++) 
        {
            if (nmbrs.at(i) == nmbrs.at(j))
            {
                numberOfTimes++; 
            }
        }

        if (nmbrs.at(i) % 2 == 0 && numberOfTimes % 2 == 0) 
        {
          answer = true; 
        }

        else if(nmbrs.at(i) % 2 == 1 && numberOfTimes % 2 == 1)
        { 
            answer = true; 
        }

        else if(nmbrs.at(i) % 2 == 0 && numberOfTimes % 2 == 1)
        {
            answer = false; 
            break; 
        }

        else if(nmbrs.at(i) % 2 == 1 && numberOfTimes % 2 == 0)
        {
            answer = false; 
            break;
        }
    }

    return answer;
}

2 个答案:

答案 0 :(得分:0)

  1. 您的代码有compilation errors

  2. ^Binary XOR Operator。您不能指望它生成pow(10,i)。因此,请将nmbrs.push_back(((n/10^i) % 10);替换为nmbrs.push_back(((n/pow(10,i)) % 10);

  3. 当我能够删除编译错误时,我意识到您的代码也存在逻辑错误。正如您对simber的定义,int is_simber(int n)应该公平和简单。

  4. bool is_simber( int n )
    {
        if ( n<0 ) return false; // simber is a positive integer
    
        int digitCount[10] = {}; // initializing all with 0;
        // digitCount array holds the number of occurance of a digit
        // so d[1] holds the number of times 1 occurred
        // d[2] holds the number of times 2 occurred and so on ... 
    
        while( n ){
            int d = n%10;
            n /= 10;
            digitCount[d]++;
        }
    
        // we just have to check 
        // any odd digit, if present, occurs an odd number of times
    
        for( int i=1; i<=9; i= i+2) // Attention i=i+2, to iterate over just odd numbers
        {
            if( digitCount[i] != 0 && digitCount[i]%2 == 0 ) return false;
        }
        return true;
    }
    

答案 1 :(得分:0)

我对is_simber

的定义
inline bool is_even(int n) { return n % 2 == 0; }

bool is_simber(int n) {
    if (n < 0) return false;
    int digits[10] = {0};
    for (; n; n /= 10) ++digits[n % 10];
    for (int i = 0; i < 10; i += 2)
        if (!is_even(digits[i]) && is_even(digits[i + 1])) return false;
    return true;
}

LIVE DEMO