C++ 检查一个数字是否是简单的

C++ 检查一个数字是否是简单的,c++,C++,simber定义为正整数,其中任何奇数(如果存在)出现奇数次,1414414为simber。4是偶数,出现四次;1是奇数,出现三次 以下是我的变量: int is_simber(int n) { int numberOfTimes = 0, length = 1, x = n; bool answer; vector <int> nmbrs = vector <int>(); //get how many digits are

simber定义为正整数,其中任何奇数(如果存在)出现奇数次,1414414为simber。4是偶数,出现四次;1是奇数,出现三次

以下是我的变量:

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;
}
int是simber(int n)
{
int numberOfTimes=0,length=1,x=n;
布尔回答;
向量nmbrs=向量();
//获取整数中的位数
做
{ 
x/=10;
长度++;
}
而(x!=0)
//获取整数中的数字
对于(int i=0;i
  • 您的代码已被删除

  • ^
    是。你不能期望它产生
    pow(10,i)
    。所以将
    nmbrs.push_-back((n/10^i)%10);
    替换为
    nmbrs.push_-back((n/pow(10,i))%10);

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

  • bool是simber(int n)
    {
    
    如果(n我对
    的定义很简单

    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;
    }
    
    inline bool是偶数(int n){返回n%2==0;}
    布尔是西姆伯(国际n){
    如果(n<0)返回false;
    整数位数[10]={0};
    对于(;n;n/=10)+位数[n%10];
    对于(int i=0;i<10;i+=2)
    如果(!is_偶数(数字[i])&&is_偶数(数字[i+1])返回false;
    返回true;
    }
    

    是时候进行一些调试了。你需要找出问题所在。或者如果有多个问题,第一个问题在哪里。插入一些打印输出,看看哪里出了问题。do/while循环计算的长度正确吗?第一个for循环的数字正确吗?即使是false,它也会打印为true。让我检查循环。这是吗你的实际代码被复制和粘贴了吗?我看到一个语法错误,它甚至会阻止它编译。是的。它在哪里?你告诉我们它在哪里(它是你的代码,你应该编译并运行它,知道它不工作)。你也没有解释具体的问题。我的代码有什么问题?它应该做这件事。如果你不告诉我们你提供了什么输入以及它在做什么,而不是它应该做什么,那就没有意义了。如果你想在这里得到帮助,请发布你的实际代码,清楚地说明问题,提供重现问题所需的输入,然后问一个具体的问题:“我的代码怎么了?”与具体值相差甚远。偶数值呢?建议不要使用
    pow
    ,因为它是一个浮点函数,因此在与整数一起使用时可能会产生舍入错误。Rafaf,它不编译。它有一个关于增量的警告和一个关于标记“==”的错误,它现在编译了,但有错误的答案。我将尝试修复我看到错误的部分。