栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

7-2 快速幂 (10 分)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

7-2 快速幂 (10 分)

7-2 快速幂 (10 分)

输入两个整数a、b,求a^b。结果保证在long long int范围内。

输入格式:

测试数据有多组,处理到文件尾。每组测试输入两个正整数a,b(1≤a,b≤62)。

输出格式:

对于每组测试,输出a^b的结果。

输入样例:
2 4

输出样例:
16

算法分析:题目的要求结果在长整型范围内,就是在提醒我们要控制运行时间,也暗示着这个题目是要压缩运行时间的, 正常的利用循环也可以求解,但是根据题意嘛,是什么算法,咱就用什么算法,在这里需要用一种快速幂运算的算法,其实也就是分治法的一种应用。

在这里还有一个比较坑的问题,就是他有多组数据,我们是要一直输入的,在C语言中有while(scanf("%d",&a)!=EOF),在java中有while(in.hasnext())来控制输入数据的截止。

代码实现:

//C语言实现
// #include
// long quick(long a,long b)
// {
//     if(b<=1)return a;
//     long temp=quick(a,b/2);//这里就是我们分解的步骤。可以结合二分法来看
//     if(b%2==0)return temp*temp;//偶数计算
//     else return temp *temp*a;//奇数计算
// }
// int main()
// {
//     long a,b;
//     long sum;
//     while(scanf("%ld %ld",&a,&b)!=EOF)//!!!!!!特别注意
//     {
//         printf("%ldn",quick(a,b));
//     }
    
// }


//java实现
import java.util.Scanner;
public class Main {
    private static long a;
    private static long b;
    public static void main(String [] args)
    {
        Scanner in=new Scanner(System.in);
        while(in.hasNext())
        {
            a=in.nextLong();
            b=in.nextLong();
            System.out.println(quick(b));
        }
        in.close();
    }

    public static long quick(long b)
    {
        if(b<=1) return a;
        long temp=quick(b/2);
        if(b%2==0) return temp*temp;
        else return temp*temp*a;
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/343745.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号