VS2013 C++有多個過載函式“sqrt”例項與引數列表匹配
阿新 • • 發佈:2019-02-02
7744問題
#include<stdio.h>
#include<math.h>
int main()
{
for (int a = 1; a <= 9; a++)
for (int b = 0;b<= 9; b++)
{
int n = a * 1100 + b * 11;
int m = floor(sqrt(n) + 0.5);
if (m*m == n)
printf("%d\n", n);
}
return 0;
}
在vs2013中遇到這種問題
分析在C++中sqrt有三種類型,引數分別為double,float,long double。n定義的引數型別是int型,而sqrt()中應該試用double型或者float型,編譯器不知道我們要呼叫哪一個sqrt型別。因此,修改為sqrt(n*1.0)
#include<stdio.h>
#include<math.h>
int main()
{
for (int a = 1; a <= 9; a++)
for (int b = 0;b<= 9; b++)
{
int n = a * 1100 + b * 11;
int m = floor(sqrt(n*1.0) + 0.5);
if (m*m == n)
printf("%d\n", n);
}
return 0;
}