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;