int n;while(scanf("%d",&n)!=EOF){//EOF的值是-1,而不是0//end of file读到文件结尾自动结束}
读到-1 -1就结束
int a,b;while(scanf("%d %d",&a,&b)==2){if(a==-1&& b==-1)break;}
给定几组数据. ---- 简单,本来就会
int n;scanf("%d",&n);while(n--){//n后面还要使用就用for循环.}
快速幂
算法思想 二分思想,所以时间复杂度
O
(
log
2
n
)
O(\log_2n)
O(log2n)
3
10
=
9
5
=
9
∗
9
4
=
9
∗
8
1
2
a
n
s
=
1
,
a
=
3
,
b
=
10
→
a
=
9
,
b
=
5
→
a
n
s
=
9
,
a
=
81
,
b
=
2
→
a
=
81
∗
81
,
b
=
1
→
a
n
s
=
9
∗
81
∗
81
,
a
=
a
∗
a
,
b
=
0
3^{10}=9^5=9*9^4=9*81^2\\ ans = 1, a=3, b=10 \to a=9,b=5 \to ans = 9, a=81, b = 2 \to a=81*81, b=1\to ans = 9*81*81,a=a*a,b=0
310=95=9∗94=9∗812ans=1,a=3,b=10→a=9,b=5→ans=9,a=81,b=2→a=81∗81,b=1→ans=9∗81∗81,a=a∗a,b=0
intFastPow(int a,int b)\\计算a的b次方
{int ans =1;while(b){if(b &1) ans=ans*a;// b & 1 的意思是 判断b是否是奇数
a=a*a;
b >>=1;//相当于 b=b/2}return ans;}
例题
#include<iostream>
using namespace std;#definelllonglong
ll pow(ll a, ll b){
ll ans =1;while(b){if(b &1)
ans = ans * a %1000;
a =(a %1000)*(a %1000)%1000;
b >>=1;}return ans;}intmain(){
ll a, b;while(scanf("%lld %lld",&a,&b)==2){if(a ==0&& b ==0)break;printf("%lld\n",pow(a, b));}return0;}