Jest tu pułapka, w którą wpada dużo początkujących adeptów.
Przetestuj:
long long wynik;
int a = 1000, b = a;
wynik = (a*b) * (a*b);
cout << wynik << endl;
To, że wynik jest tu typu long long, to za mało. Obliczenia w powyższym przykładzie robione są na typie int, a dopiero potem, błędny już wynik, konwertowany jest na long long i przypisany do zmiennej wynik.