HDU 2035 人見人愛A^B


題目連接:http://acm.hdu.edu.cn/showproblem.php?pid=2035

法一:每次取余數

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 int main()
 4 {
 5     int n,m,mul;
 6     while(~scanf("%d%d",&n,&m)&&(n||m))
 7     {
 8         mul=1;
 9         while(m--)
10             mul=(mul*n)%1000;
11             printf("%d\n",mul);
12     }
13     system("pause");
14     return 0;
15 } 

法二:其實直接每次取余數就能過的 第一遍就是用這種方法過的 這次算是用二分加速過的吧 就是每次都講底數平方 指數除以2 要是偶數沒問題 要是奇數就在將多余的那部成到sum中(初始值為1)  不停地做循環知道b<=1 最后輸出sum*a; 注意b開始不能取余數 否則會因為乘法的次數改變而出錯

 1 View Code 
 2  #include<iostream>
 3  using namespace std;
 4  int ex_pow(int a,long long b)
 5  {
 6      long long sum;
 7      a=a%1000;//a可以取余數 但b千萬不要取余數 否則b較大時出錯!!!因此WA了兩次 
 8      sum=1;
 9      while(b>1)
10      {         
11               if(b%2==1)
12               {         sum=(sum*a)%1000;
13                         
14               }
15               else
16               {
17                       
18               }
19                a=a*a%1000;
20                b=b/2;            
21      }
22      return  sum%1000*a%1000;
23  }
24  int main()
25  {   
26      long long a,b;
27      while(cin>>a>>b)
28      {               
29                      if(a==0&&b==0)
30                      break;
31                      a=a%1000;
32                      cout<<ex_pow(a,b)<<endl;
33      }
34     // system("pause");
35      return 0;
36  }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM