这里需要注意的是,写移位或者位运算符的时候要加上括号,不然容易出错。
#include<stdio.h> #include<stdlib.h> #define n 1000 int compute_a_b(int a,int b){ if(b==1) return a%n; else if(b&1) return ((compute_a_b(a,b>>1)%n)*(compute_a_b(a,(b>>1)+1)%n))%n; else if((b&1)==0) return ((compute_a_b(a,b>>1)%n)*(compute_a_b(a,b>>1)%n))%n; } int main(){ int a,b; while(scanf("%d%d",&a,&b)&&a+b!=0){ printf("%d\n",compute_a_b(a,b)); } return 0; }