zoukankan      html  css  js  c++  java
  • ACM2035_(递归法求幂)

      /*

    编写一个递归算法,求解m的n次方。 

    我们一般求解m的n次方,一般使用n个m相乘的办法来求解。

    其实我们还可以使用另外一种更有效率的办法求解这个问题。

    我们知道一个数的0次方等于1,一个数的1次方等于该数本身。

    如果一个数的n次方的n可以被2整数,我们可以将求解的问题,

    分解为m的(n/2)次方乘以m的(n/2)次方。如果不能被2整除,

    则可以将问题求解转变为m乘以m的(n-1)次方,

    通过这个递归的办法,我们可以很快的分解求出问题。

    编写代码如下: 

    */

     
    
    unsigned long myPow(int m, int n) 
    { 
      unsigned long tmp; 
      if(n == 0) 
        return 1; 
      if(n == 1) 
        return m; 
      if(n % 2 == 0){ 
        tmp = myPow(m, n/2); 
        return tmp*tmp; 
      } 
      else{ 
        return m*myPow(m, n-1); 
      } 
    } 

    下面的是AC过的

    /*
    人见人爱“^ B
    
    时间限制:2000/1000 MS(JAVA /其他)内存限制:三万二千七百六十八分之六万五千五百三十六K(Java /其他的)
    总提交(S):16529接受提交():11706
    
    
    问题说明
    求ā^ B的最后三位数表示的整数。
    说明:A ^ B的含义是“”的乙次方“
     
    
    输入
    B = 0,则表示输入数据的结束,不做处理。
     
    
    产量
    对于每个测试实例,请输出A ^乙的最后三位表示的整数,每个输出占一行。
     
    
    采样输入
    2 3
    12 6
    6789 10000
    0 0
     
    
    样本输出
    8
    984
    1*/
    #include<stdio.h>
    int f(int m, int n, int p)
    {
        int k;
        if(n==1) return m%p;
         k=f(m,n/2,p);
         return (k*k*(n%2?m%p:1))%p;
    }
    int main()
    { 
        int m,n;
        while(scanf("%d%d",&m,&n),n||m)
            printf("%d
    ",(f(m,n,1000))%1000);
        return 0;
    }
  • 相关阅读:
    C#中的Dictionary类,默认key是区分大小写的
    for循环的3个参数
    C#循环读取文件流,按行读取
    C#合并两个Dictionary的方法
    C#的Equals不区分大小写
    php的isset()和empty()区别
    css !important的作用
    mysql创建用户,并指定用户的权限(grant命令)
    解决安卓微信浏览器中location.reload 或者 location.href失效的问题
    【转】前端懒加载以及预加载
  • 原文地址:https://www.cnblogs.com/orangebook/p/3184033.html
Copyright © 2011-2022 走看看