CSP2022-T1(乘方)

【题目来源】:http://oj.tfls.net/d/lnzt/p/13

 

 【-1骗分】(实测50分)

1     cout<<-1;

 【10分】b=1,a^b=a   (实测20分,含a=1和-1分)

1     int a,b;//a,b<=1e9,不会超出int
2   cin>>a>>b;
3     cout<<a;  //b=1,a^b=a;

 【30分】b=1 or b=2  (实测70分,含a=1和-1分

1     long long a,b;//a,b<=1e9,a*a会超出int
2     cin>>a>>b;
3     if(b==1)
4         cout<<a;  //b=1,a^b=a;
5     else if(a*a>=1e9)
6         cout<<-1;
7     else cout<<a*a;

【60分】b次循环计算a^b

1     long long a,b,c=1;//a^b<=1e18,会超出int
2     cin>>a>>b;
3     for(int i=1;i<=b;i++)
4         c*=a;
5     if(c>=1e9)
6         cout<<-1;
7     else cout<<c;

 【100分】因为b<=1e9,循环b次会超时,可以在循环过程中判断是否已经超出1e9,超出即可退出循环。需要考虑一个特殊情况即a=1,此时a^b=1,无法在循环过程中跳出,需要特别判断。

 1     long long a,b,c=1; //a^b<=1e18,会超出int
 2     cin>>a>>b;
 3     if(a==1) {  
 4         cout<<a;
 5         return 0;
 6     }
 7     for(int i=1;i<=b;i++){
 8         c*=a;
 9         if(c>=1e9){
10             cout<<-1;
11             return 0;
12         }
13     }
14     cout<<c;
posted @ 2022-11-24 16:46  TFLSZXL  阅读(72)  评论(0编辑  收藏  举报