检查某个号码是否为Simber

Checking if a number is a Simber

本文关键字:Simber 是否 号码 检查      更新时间:2023-10-16

一个数被定义为一个正整数,其中任何奇数(如果存在)出现奇数次,1414414是一个数。4是偶数,出现了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;
}
  1. 你的代码有编译错误

  2. ^为二进制异或运算符。你不能期望它生成pow(10,i)。所以用nmbrs.push_back(((n/pow(10,i)) % 10);代替nmbrs.push_back(((n/10^i) % 10);

  3. 当我能够删除编译错误时,我意识到你的代码也有逻辑错误。根据您对数字的定义,int is_simber(int n)应该是公平和简单的。

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;
}

我对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;
}

现场演示