F. Easy Function

1826 단어
F.       Easy Function
 
Please help Xiao Ming Write a Super Fast function whichresult is like below:
int cmp(int a, int b, int c) {
   SuperLong factorial = 1;
   for(int i = 1; i <= a; i++)
       factorial *= i;
 
   SuperLong power = 1;
   for(int i = 1; i <= c; i++)
       power *= b;
  •  

  •    if(factorial < power)
           return -1;
       else if(factorial == power)
           return 0;
       else
           return 1;
    }
    SuperLong is a type of integer with unlimited length.
    Input:
    Inputcontains multiple test cases. One line one case, and each case is threeintegers, a, b, c. We guarantee that 1 <= a, b, c <= 20000.
    Output:
    For eachcase, print the function result, and one line one case.
    Sample input and output
    Sample input: 1 1 1 3 2 3 5 11 2
    Sample output: 0 -1 -1
    제목은 비교 a!b^c의 크기와 데이터 범위가 넓기 때문에 기교가 있어야 합니다.
    log(a*b)=log(a)+log(b)
    우리는 계승취대수를 화합의 형식으로 쓰고 상응하는 b^c를 조정할 수 있기 때문에 아래의 두 개의 크기를 비교하는 것이 되었다
    1.log(1)+log(2)+...+log(a-1)+log(a)
    2. c*log(b)
    이 둘도 범위를 초과하지 않기 때문에 직접 크기를 비교할 수 있다
    #define _CRT_SECURE_NO_DEPRECATE
    #include <iostream>
    #include <cmath>
    using namespace std;
    double base[20005];// 
    int main()
    {
    	freopen("in.txt", "r", stdin);
    	freopen("out.txt", "w", stdout);
    	int a, b, c;
    	base[1] = log(1.0);
    	for (int i = 2; i<20001; i++)base[i] = base[i - 1] + log(1.0*i);
    	while (cin >> a >> b >> c){
    		double temp = 1.0*c*log((double)b);
    		if (temp == base[a])cout << "0" << endl;
    		else if (temp > base[a])cout << "-1" << endl;
    		else cout << "1" << endl;
    	}
    	return 0;
    }

    좋은 웹페이지 즐겨찾기