Пожалуйста, посмотрите на следующий код
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{
//int side1 = 0;
//int side2 = 0;
//int rightSide = 0;
cout << "Right Side" << setw(10) << "Side1" << setw(10) << "Side2" << endl;
for(int i=1;i<=500;i++)
{
//side1++;
//cout << side1 << endl;
for(int a=1;a<=500;a++)
{
//side2++;
//cout << "side 2 " << side2 << endl;
for(int c=1;c<=500;c++)
{
//rightSide++;
int rightSideSqr = pow(c,c);
int side1Sqr = pow(i,i);
int side2Sqr = pow(a,a);
if(rightSideSqr == (side1Sqr+side2Sqr))
{
cout << rightSideSqr << setw(15) << i << setw(10) << a << endl;
}}
}
}
}
Это дает ошибку «PythagorialTriples.cpp: 28: ошибка: вызов перегруженного` pow (int&Int&) «неоднозначно». Этого не произойдет, если я просто использую ручную работу, например, i * i, вместо метода. Может кто-нибудь объяснить, почему это происходит? Я новичок в C ++ в любом случае. Спасибо
Есть несколько перегрузок для pow
определяется в <cmath>
, В вашем коде все эти 3 одинаково действительны, поэтому у компилятора возникают проблемы с выбором правильного:
pow(float, int);
pow(double, int);
pow(long double, int);
Самое простое решение — использовать static_cast
по первому аргументу, чтобы устранить любую неопределенность. например
int side1Sqr = pow( static_cast<double>(i) ,i );
int side2Sqr = pow( static_cast<double>(a) ,a );
Вау! Pow (x, y) — это x, повышенное до y-й степени (в математических терминах — xY) !! НЕ х * у
Итак, вы пытаетесь взять меняIth сила в 5003 вложенный цикл Наверное, не то, что вы хотите. Замените на pow (i, 2) для вашего желаемого поведения.
Обратите внимание, @Mooing Duck поднимает отличную мысль о x ^ y в c ++, который является оператором XOR. Но я думаю, вы поняли это, если уже используете pow
тем не мение.
Он не может выяснить, какую перегруженную функцию использовать.
Пытаться
pow(double(i), i);
или же
pow(double(i), 2);
Так как это похоже на то, что вы хотите.
Ты уверен, что справишься с таким большим пухом?
Пау (х, у) хY. Посмотрите на
http://www.cplusplus.com/reference/clibrary/cmath/pow/
двойной пау (двойное основание, двойная экспонента);
длинный двойной пау (длинное двойное основание, длинный двойной показатель);
float pow (основа поплавка, показатель поплавка);
двойной пау (двойное основание, int экспонента);
длинный двойной пау (длинное двойное основание, показатель степени int);
Нет версии INT. Ваш компилятор не знал, какой из них правильный. Вы должны сказать им, используя static_cast как:
int side1Sqr = pow(static_cast<double>i,i);
Для большой точности расчета вы можете использовать:
Существует также одно решение от повышения.