HDU 2035 人见人爱A^B

来源:互联网 发布:地坪漆 知乎 编辑:程序博客网 时间:2024/05/01 21:12

原文来自:http://www.cnblogs.com/mycapple/archive/2012/08/06/2624534.html

法一:每次取余数


#include<stdio.h> #include<stdlib.h> int main() {     int n,m,mul;     while(~scanf("%d%d",&n,&m)&&(n||m))     {         mul=1;         while(m--)             mul=(mul*n)%1000;             printf("%d\n",mul);     }     system("pause");     return 0; }


法二:其实直接每次取余数就能过的 第一遍就是用这种方法过的 这次算是用二分加速过的吧 就是每次都讲底数平方 指数除以2 要是偶数没问题 要是奇数就在将多余的那部成到sum中(初始值为1)  不停地做循环知道b<=1 最后输出sum*a; 注意b开始不能取余数 否则会因为乘法的次数改变而出错

 #include<iostream> using namespace std; int ex_pow(int a,long long b) {     long long sum;     a=a%1000;//a可以取余数 但b千万不要取余数 否则b较大时出错!!!因此WA了两次      sum=1;     while(b>1)     {                       if(b%2==1)              {         sum=(sum*a)%1000;                                      }              else              {                                    }               a=a*a%1000;               b=b/2;                 }     return  sum%1000*a%1000; } int main() {        long long a,b;     while(cin>>a>>b)     {                                    if(a==0&&b==0)                     break;                     a=a%1000;                     cout<<ex_pow(a,b)<<endl;     }    // system("pause");     return 0;
}
	
				
		
原创粉丝点击