1. 程式人生 > >VS2013 C++有多個過載函式“sqrt”例項與引數列表匹配

VS2013 C++有多個過載函式“sqrt”例項與引數列表匹配

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; }

這裡寫圖片描述
這裡寫圖片描述