2017-09-09 7 views
0
#include <iostream> 
using namespace std; 

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

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

    while(n!=0) 
     { 
      if(n%10%x==0) 
       s=s+n%10; 
      nr++; 
      if(n%10<y) 
       p=p*(n%10); 
      nr1++;  
     } 

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

n , xy에 값을 입력 할 수 있지만 이후에는 결과가 표시되지 않습니다. 나는 무엇을해야할지 정말로 모른다. 나는 그 무언가가 끝에있는 것을 잘못했다고 생각하지만, 실제로 무엇을 알 수는 없습니다. 2 일 후에 시험을 치러야 할 사람이 있으면 도와 주시면 감사하겠습니다 ...왜 그것 cout s, nr, p 및 nr1 dosen't?

+5

당신은 루프에서'수정하지 n' 않았다. 루프가 끝나기 위해 어떻게 '0'이 될까요? 디버거를 사용하여 코드를 한 줄씩 단계별로 작성한 경우 매우 빨리 발견했을 것입니다. 디버거는 프로그래머 도구 상자에서 가장 중요한 도구 중 하나입니다. –

+1

또한,'if' 문이 당신이 기대하는대로하지 않을 것이라고 생각합니다. 이것은 또한 디버거를 사용하면 매우 빨리 발견 될 것입니다. –

+0

'n = 0'을 입력하면 while 회 돌이에 입력되지 않고, '1'보다 큰 경우에는 while 회 돌이에서 빠져 나오지 않습니다. 달성하고자하는 것을 설명해 주시겠습니까? – MCG

답변

0

무한 루프가 있습니다. 이것은 당신의 논리에 대한 해답이 될 것입니다

while(n!=0) 
{ 
    n = n%10; 

    if(n%x==0) 

     s=s+n ; 
     nr++ ; 

    if(n<y) 
     p=p*n ; 
     nr1++ ; 
} 
+0

이걸 바꿔도 작동하지 않습니다 –

+0

@ BogdanNacev 로직을 이해하기 위해 샘플 입력과 출력을 사용할 수 있습니까? –

+0

이데아는 x로 나눈 숫자 n의 숫자를 더하고 그 다음에 y보다 작은 n의 숫자를 곱합니다 : –

0

:

당신은 같이 당신의 동안 로직을 가질 수 있습니다. 정적 값을 사용하여 동적으로 만듭니다. 출력 작업 코드 : http://codepad.org/b5kpWC6y

#include <iostream> 

    using namespace std; 

    int main() { 
     int n = 123456; 
     int x=2; 
     int y=5; 

     int s=0; 
     int p=1; 
     int digit = 0; 

     while(n>0) 
     { 
      digit=n%10; 

      if(digit%2==0) 
      { 
       s=s+digit; 
      } 
      if(digit<y) 
      { 
       p=p*digit; 
      } 

      n=n/10; 


     } 

     cout<<"\nSum = " << s; 
     cout<<"\nProd = " << p; 
    }