Wątek przeniesiony 2014-11-17 10:27 z C/C++ przez ŁF.

Program obliczający NWW i NWD nie działa prawidłowo

0

Męczę się już mnóstwo czasu z zadaniem:

Napisz program który dla zadanych dwóch liczb naturalnych a i b oblicza ich NWD oraz NWW.
Format wejścia:
Pierwsza linia wejścia zawiera liczbę naturalną z - liczbę zestawów danych. Za nią znajduje się z par liczb ai , bi .
1 ≤ ai ,bi ≤ 1000000.
Format wyjścia:
Dla każdego zestawu danych wypisz dwie liczby oddzielone spacją - NWD(ai ,bi )
oraz NWW(ai ,bi ).
Przykład:
Dla danych wejściowych:

3
4 6
2 4
5 8

Poprawną odpowiedzią jest

2 12
2 4
1 40

Mógłby ktoś spojrzeć i pomóc co może być nie tak ?

Mój kod:

#include <iostream>
using namespace std;

void NWD2(int a, int b)
{
	int c, a0 = a, b0 = b;
	while (b != 0)
	{
		c = a%b;
		a = b;
		b = c;
	}
	cout << a << " " << (long long int)(a0 / a) * b0 << endl;
}

int main()
{


	int z;
	cin >> z;
	int **tab = new int*[2];
	for (int i = 0; i < z; i++)
	{
		tab[i] = new int[2];
		cin >> tab[i][0] >> tab[i][1];
	}

	for (int i = 0; i < z; i++)
	{
		NWD2(tab[i][0], tab[i][1]);
	}
	return 0;
}

dodanie znaczników <code class="cpp"> - @furious programming

1
  1. nie musisz oddzielać wejścia od wyjścia, to powinno wystarczyć:
int main()
  {
   int t;
   cin>>t;
   while(t--)
     {
      int a,b,p,q,r;
      cin>>a>>b;      
      for(q=b,p=a;q;p=q,q=r) r=p%q;
      cout<<q<<' '<<(a/q)*(long long)b<<endl;
     }
   return 0;
  }
  1. Problem polega na bezsensownym nazewnictwie:
    cin >> z;
    int **tab = new int*[2];

nie widzisz różnicy pomiędzy z a 2

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