首页 > 代码库 > pow的小事不简单

pow的小事不简单

http://acm.hdu.edu.cn/showproblem.php?pid=5878

#include<stdio.h>#include<iostream>#include<algorithm>#include<string.h>#include<math.h>using namespace std;long long int ll=1e9;long long int ss[500005];/*long long int pow(long long int a, long long int b) {    long long int ans = 1;     while(b)     {         if(b & 1)ans *= a;        a *= a;         b>>=1;     }     return ans; }*/ ///不定义上面这个函数的话答案就是错误的因为对于pow在文件中定义的函数的返回值类型是double,而本题仅仅要求返回long long类型的值,若是直接用文件中自定义的pow函数就会因为精度的差异而造成错误int main(){    int t;  long long int ch;    cin>>t;    while(t--){            int p=0;        int n;        for(long long int i=0;i<31;i++)        for(long long int j=0;j<20;j++)            for(long long int k=0;k<14;k++)        for(long long int l=0;l<12;l++){            ch=pow(2,i)*pow(3,j);            if(ch>ll)break;            ch*=pow(5,k);            if(ch>ll)break;            ch*=pow(7,l);            if(ch>ll)break;            ss[p++]=ch;        }        sort(ss,ss+p);    cin>>n;    int l=0;    int r=p-1;    while(l<r){        int mid=l+(r-l)/2;        if(ss[mid]>=n){            r=mid;        }        else l=mid+1;    }    cout<<ss[l]<<endl;    }}

 

pow的小事不简单