Program zliczający sumę nwd zadanych liczb

0

Mam do zapisania program, którego wejście składa się z ciągu liczb całkowitych. Każda liczba przyjmuje wartość od 0 do 30000, gdzie liczby od 2 do 30000 oznaczają kolejne wartości dane przez generator, liczba 1 oznacza rozkaz wyznaczenia NWD ostatnich dwóch liczb większych od 1, a 0 jest zawsze ostatnią liczbą pojawiającą się na wejściu. Dwie pierwsze liczby są zawsze większe od 1 (czyli liczb na wejściu jest co najmniej 3).
Mój program jednak zwraca same zera na wyjściu, za bardzo utrudniłem sobie życie i zamęciłem ten kod, nie wiem jednak co mam robić, żeby wyjść z tego impasu.

Przykład:

Wejście:

5 5 4 4 1 5 5 1 4 4 1 1 1 5 4 3 2 1 0

Wyjście:

22

#include <iostream>
using namespace std;
//////////////////////////
int NWD (int a, int b)
{
    int temp, suma;
    while (b!=0)
    {
        temp=a%b;
        a=b;
        b=temp;
    }
    suma=suma+a;
}
//////////////////////////
int main() {
    int suma=0;
    int tab[1000000],a=0,b,position;
    for (int i=1;i<=1000000;i++)
    {
        cin>>tab[i];
        if (tab[i]==1) 
        {
            for(i;i>=1;i--)
            {
                if (tab[i]!=1 && tab[i]!=0) 
                {
                    a=tab[i];
                    position=i;
                }
                if (a!=0)
                {
                    for(i;i>=1;i--)
                    {
                        if (tab[i]!=1 && tab[i]!=0) 
                        {
                            b=tab[i];
                        }    
                    }
                }
            }
            cout<<NWD(a,b);
        }
        if (tab[i]==0) return 0;
    }
    return 0;
} 
1

Jak sobie pościelisz tak się wyśpisz:

#include <iostream>
using namespace std;

unsigned NWD(unsigned a,unsigned b)
  {
   while (b!=0)
     {
      unsigned r=a%b;
      a=b;
      b=r;
     }
   return a;
  }

int main()
  {
   unsigned sum=0,a=0,b=0;
   while(true)
     {
      unsigned c;
      cin>>c;
      if(!c) break;
      if(c>1)
        {
         a=b;
         b=c;
        }
      else sum+=NWD(a,b);
     }
   cout<<sum;
   return 0;
  }

http://ideone.com/ZZXK41

1 użytkowników online, w tym zalogowanych: 0, gości: 1