1. 程式人生 > >”藍橋杯“演算法大賽·入門演算法(2)

”藍橋杯“演算法大賽·入門演算法(2)

問題描述

給定圓的半徑r,求圓的面積。

參考程式碼

C++

#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;

int main()
{
    double radius;
    cin >> radius;
    double area = acos(-1) * pow(radius, 2);
    cout << fixed << setprecision(7) << area << endl;
    return 0;
}

Java

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        double radius = scanner.nextDouble();
        double area = Math.PI * Math.pow(radius, 2);
        System.out.printf("%1.7f", area);
        scanner.close();
    }
}

計算思想

圓的面積公式為S={\pi}r^2

Java有java.lang.Math(數學)包,內建圓周率常量(double java.lang.Math.PI)和乘方函式(double java.lang.Math.pow(double, double)),可以較精確地計算圓面積。輸出可以呼叫PrintStream java.io.PrintStream.printf(String format, Object... args)設定小數精度。

C++儘管有<cmath>可以呼叫乘方函式(constexpr __typeof__((0.0)) std::pow<double, int>(double __x, int __y)),但沒有準確的圓周率常量。藉助反餘弦函式(constexpr double std::acos<int>(int __x))和函式值{\pi}=\arccos(-1)

,可以較為精確地代替圓周率常量。輸出則需要<iomanip>中的std::ios_base &std::fixed(std::ios_base &__base)和std::_Setprecision std::setprecision(int __n)固定小數位精度。