欧拉工程第29题:Distinct powers

来源:互联网 发布:ppt圆环图编辑数据 编辑:程序博客网 时间:2024/05/29 09:23

题目链接:https://projecteuler.net/problem=29

a^b for 2 ≤ a ≤ 100 and 2 ≤ b ≤ 100,能产生无重复的数据有多少个?
这个题目其实很简单的,注意一点定义成int、long都会发生越界的,Long只能存储:-2^64+1–2^64-1
所以不要用long,不然错的找不到原因。在java中Math类,可以计算指数,还是要注意这个返回的结果是double型,如果转成long,恭喜你错了。查看javaAPI中,double类型有如下截图:
double长度
用double还是能存完的。
java中Set集合不包含相同元素。有HashSet、TreeSet都可以应用保证不会有重复的数据。

package projecteuler21to30;import java.util.Date;import java.util.TreeSet;class level29{    void solve(){        int startA=2;        int endA=100;        int startB=2;        int endB=100;        int num=0;        TreeSet set=new TreeSet();        for(int i=startA;i<=endA;i++){            for(int j=startB;j<=endB;++j){//              long powab=(long) Math.pow(i, j);//有2的100次方,发生越界的情况,所有这样不对。                //long最长的是2的64次方-1.都是因为转成long惹的祸                double powab= Math.pow(i, j);                if(set.add(powab)){//set.add(Math.pow(i, j))                    num++;//                  System.out.print(powab+"、");                }            }        }        System.out.println(set.size()+","+num);    }}public class Problem29 {    public static void main(String[] args){        Date beginTime=new Date();        new level29().solve(); //9183        Date endTime=new Date();        long Time = endTime.getTime()-beginTime.getTime();        System.out.println("Time:"+Time/1000+"秒"+Time%1000+"毫秒");        }}
0 0
原创粉丝点击