找到其中正好有2个9的数字

时间:2017-10-31 17:44:05

标签: c++

我们输入n个数字,程序必须输入其中正好有2个'9'的数字。 (例如,如果我们输入9193然后程序将输入它,但如果我们写73999或256它将不会给出任何输出)。 所以我写了这段代码

int main(){
int a, n, i, count=0, y;
cin>>n;
for(i=1; i<=n; i++){
    cin>>a; y=a;
    while(y>0){
       if(y%10==9) count++;
       y=y/10;
   }
   if(count==2) cout<<a<<endl;
}
return 0;
}

但我无法理解为什么这不起作用。 如果我改变它并以这种方式写它就可以了。

int main(){
int a, n, i, count, y;
cin>>n;
for(i=1; i<=n; i++){
             count=0;
    cin>>a; y=a;
    while(y>0){
       if(y%10==9) count++;
       y=y/10;
   }
   if(count==2) cout<<a<<endl;
}
return 0;
}

如果你向我解释,我将非常感激。

3 个答案:

答案 0 :(得分:1)

只需读取字符串(或将其转换为)并计数:

for(i=1; i<=n; i++){
   std::string numstr;
   std::cin >> numstr; 
   if( std::count( numstr.begin(), numstr.end(), '9' ) == 2 )
      std::cout << numstr << std::endl;
}

答案 1 :(得分:1)

如果您不是每次都通过主循环将count重置为0,那么您需要将新号码中的计数添加到前一个号码的计数中。< / p>

因此,如果您为第一个号码输入19,则会将count设置为1。然后,如果您为第二个号码键入939,则会将count设置为3,并且测试if (count == 2)将无法成功,即使该号码中有2个9 。在此之后,count永远不会成为2,因为您会继续添加-9 % 10

您需要从头开始计算每个数字。

请注意,您的算法不适用于负数。 -99,而不是SampleApp.mxml

答案 2 :(得分:-1)

我们需要为每个案例初始化count=0