HDOJ 1097 A hard puzzle(循环问题)

Problem Description
lcy gives a hard puzzle to feng5166,lwg,JGShining and Ignatius: gave a and b,how to know the a^b.everybody objects to this BT problem,so lcy makes the problem easier than begin.
this puzzle describes that: gave a and b,how to know the a^b’s the last digit number.But everybody is too lazy to slove this problem,so they remit to you who is wise.

Input
There are mutiple test cases. Each test cases consists of two numbers a and b(0< a,b<=2^30)

Output
For each test case, you should output the a^b’s last digit number.

Sample Input
7 66
8 800

Sample Output
9
6

本题重要的是循环节的判断,java的大数会超时的。
下面代码实现了循环节的寻找。

import java.math.BigDecimal;
import java.util.Scanner;

public class Main {
    static int da[] = new int[10];
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        dabiao();//打表
        while(sc.hasNext()){
            //超时
//          BigDecimal a = sc.nextBigDecimal();
//          int b = sc.nextInt();
//          a = a.pow(b);
//          String str = a.toString();
//          System.out.println(str.charAt(str.length()-1));

            //找规律
            int a = sc.nextInt();
            int b = sc.nextInt();
            a = a%10;
            switch(a){
            case 0:System.out.println(da[0]);break;
            case 1:System.out.println(da[1]);break;
            case 2:System.out.println(shuchu(b,da[2],2));break;
            case 3:System.out.println(shuchu(b,da[3],3));break;
            case 4:System.out.println(shuchu(b,da[4],4));break;
            case 5:System.out.println(shuchu(b,da[5],5));break;
            case 6:System.out.println(shuchu(b,da[6],6));break;
            case 7:System.out.println(shuchu(b,da[7],7));break;
            case 8:System.out.println(shuchu(b,da[8],8));break;
            case 9:System.out.println(shuchu(b,da[9],9));break;
            }

        }

    }

    private static int shuchu(int b, int i, int j) {
        b=b%i;
        int sum=j;
        if(b==0){
            b=i;
        }
        for(int k=1;k<b;k++){
            sum=sum*j;
        }
        return sum%10;
    }

    private static void dabiao() {
        da[0]=0;
        da[1]=1;

        int h=0;
        for(int i=2;i<10;i++){
            h=0;
            for(int k=2;k<10;k++){
                if(i==hm(k,i)){
                    h=k-1;
                    break;
                }
            }
            da[i]=h;
        }

        //0-9的循环节输出
//      for(int i=0;i<10;i++){
//          System.out.println(da[i]);
//      }

    }

    private static int hm(int k,int i) {
        int sum=1;
        for(int j=0;j<k;j++){
            sum=sum*i;
        }
        return sum%10;
    }

}
时间: 2024-09-20 18:53:33

HDOJ 1097 A hard puzzle(循环问题)的相关文章

HDOJ 1061 Rightmost Digit(循环问题)

Problem Description Given a positive integer N, you should output the most right digit of N^N. Input The input contains several test cases. The first line of the input is a single integer T which is the number of test cases. T test cases follow. Each

HDOJ 1097(幂取模)

  //超时代码,需要o(logn)#include <stdio.h>int main(){ int m,n,i,ans=1; while (scanf("%d%d",&m,&n)!=EOF) { for (i=1;i<=n;i++) { ans*=m; ans%=10; } printf("%d\n",ans); }} #include<stdio.h>long pow_mod(int m, int n, int p

HDOJ(HDU) 1799 循环多少次?(另类杨辉三角)

Problem Description 我们知道,在编程中,我们时常需要考虑到时间复杂度,特别是对于循环的部分.例如, 如果代码中出现 for(i=1;i<=n;i++) OP ; 那么做了n次OP运算,如果代码中出现 fori=1;i<=n; i++) for(j=i+1;j<=n; j++) OP; 那么做了n*(n-1)/2 次OP 操作. 现在给你已知有m层for循环操作,且每次for中变量的起始值是上一个变量的起始值+1(第一个变量的起始值是1),终止值都是一个输入的n,问最后

HDOJ 1098 Ignatius&amp;#39;s puzzle

Problem Description Ignatius is poor at math,he falls across a puzzle problem,so he has no choice but to appeal to Eddy. this problem describes that:f(x)=5*x^13+13*x^5+k*a*x,input a nonegative integer k(k<10000),to find the minimal nonegative integer

HDOJ 1164 Eddy&amp;#39;s research I(拆分成素数因子)

Problem Description Eddy's interest is very extensive, recently he is interested in prime number. Eddy discover the all number owned can be divided into the multiply of prime number, but he can't write program, so Eddy has to ask intelligent you to h

php对关联数组循环遍历的实现方法

 这篇文章主要介绍了php对关联数组循环遍历的实现方法,涉及php操作数组的技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了php对关联数组循环遍历的实现方法.分享给大家供大家参考.具体分析如下: php对于类似 ? 1 $age = array("zhangshan"=>14,"lisi"=>15,"sharejs"=>16); 这样的数组可以通过foreach的方法进行遍历,下面是详细的代码: ? 1

viewpager循环滚动和自动轮播的问题

ViewPager是一个常用的android组件,不过通常我们使用ViewPager的时候不能实现左右无限循环滑动,在滑到边界的时候会看到一个不能翻页的动画,可能影响用户体验.此外,某些区域性的ViewPager(例如展示广告或者公告之类的ViewPager),可能需要自动轮播的效果,即用户在不用滑动的情况下就能够看到其他页面的信息. 为此我查阅了网络上现有的一些关于实现这样效果的例子,但都不是很满意,经过反复实验,在这里总结并分享给大家,希望能有所帮助. 循环滑动效果的实现:PagerAdap

java exlipse-怎样实现这个异常的循环?求大神

问题描述 怎样实现这个异常的循环?求大神 package ch06; import java.util.InputMismatchException;import java.util.Scanner; public class DivideDemo { /** * @param args */public static void main(String[] args) { // TODO Auto-generated method stub try{ Scanner sc=new Scanner

c语言-C语言用递归求圆周率的值,要求精确到小数点后3位,不得使用循环

问题描述 C语言用递归求圆周率的值,要求精确到小数点后3位,不得使用循环 C语言用递归求圆周率的值,要求精确到小数点后3位,不得使用循环 解决方案 http://jingyan.baidu.com/article/bea41d437c69b8b4c51be6e9.html 解决方案二: public class Test { public static void main(String[] args) { System.out.println("怎么插入代码块.."); } }