我的代码奇怪地无法正常工作

时间:2017-09-09 20:07:35

标签: c++

#include <iostream>
using namespace std;


int main()
{
    int n,x,y,s=0,p=1 ;
    int nr=0,nr1=0 ;


    cout<<"n=" ;
    cin>> n ;
    cout<<"x=" ;
    cin>> x ;
    cout<<"y=" ;
    cin>> y ;

    while(n!=0)
        {


            if(n%10%x==0)

                {s=s+n%10 ;
                 n=n/10 ;
                 nr++ ;
                 }

            if(n%10<y)

                {p=p*(n%10) ;
                n=n/10 ;
                nr1++ ;
                }


        }

    cout<<"s="<<s<<"\n" ;
    cout<<"nr="<<nr<<"\n" ;
    cout<<"p="<<p<<"\n" ;
    cout<<"nr1="<<nr1<<"\n" ;
}

程序的Ideea是添加一个数字n的数字,用n除以并计算它们,然后乘以小于y的数字并计算它们。 如果我给y等于或大于6的值,程序运行,总和是好的,但产品不是。 示例: 我给出了值123456 x值为2,y值为6

n=123456
x=2
y=6
s=12
nr=3
p=15
nr1=3

除以2的n位数是2,4和6所以总和是12.完美! 但是产品应该是1x2x3x4x5,因为数字小于6而nr1的位数应该是5。

如果我给一个低于6的值,它就不会工作...... 例如,我们为n和x保留相同的值,并给y值4。

整个输出是:

n=123456
x=2
y=4

它甚至不计算s p nr和nr1 ...... 为什么?

2 个答案:

答案 0 :(得分:2)

正如Federic所说,你在两种情况下都从n中删除了一个数字。在这里,既然你正在使用if语句而不是if-else这两个语句都可以在同一个迭代中运行,每次都会(或可能)将n减少2位数。

解决方案:

删除n = n / 10;从两个案例中都可以在if语句之外(以及之后)进行。

toggle-focus

答案 1 :(得分:1)

在这两种情况下,您都会删除号码中的数字:

  if(n%10%x==0)
  {
       s=s+n%10 ;
       n=n/10 ; //*********
       nr++ ;
  }

  if(n%10<y)
  {
       p=p*(n%10) ;
       n=n/10 ; //*********
       nr1++ ;
  }

请看两行:

//*********