幂的数字和

幂的数字和
2^15 = 32768,而32768的各位数字之和是 3 + 2 + 7 + 6 + 8 = 26。

2^1000的各位数字之和是多少?

package EULER16;

import java.util.HashMap;
import java.util.Map;

/**
 * Created by Administrator on 2016/8/5.
 * 幂的数字和
 * 2^15 = 32768,而32768的各位数字之和是 3 + 2 + 7 + 6 + 8 = 26。
 * 2^1000的各位数字之和是多少?
 * 这个就是看那么大的数怎么存,没发现有什么规律之类的
 * 注意:
 *  1、遍历map过程中修改该map会有异常
 *  2、for(Long key:map.keySet()),这种方式key不是挨着的
 */
public class EULER16 {
    public static void main(String[] args){
        long start = System.currentTimeMillis();
        Map<Long,String> map = new HashMap<Long, String>();
        map.put(0l,"1");
        for (int i=0;i<1000;i++){
            for (long j=0;j<map.size();j++){
                float value = Float.valueOf(map.get(j));
                value *= 2;
                int num = (int)value;
                map.put(j,num%10000+"");
                if (num/10000>0) {//其实不是0就是1,乘二后进位只可能为一
                    if (map.get(j + 1) != null) {
                        float nextNum = Float.valueOf(map.get(j + 1));
                        nextNum += 0.5;//从地位开始遍历,之后会乘2,相当于进位1
                        map.put(j+1,nextNum+"");
                    } else {
                        map.put(j+1,"1");
                        break;
                    }
                }
            }
        }
        long sum = 0;
        String total = "";
        for (Long key:map.keySet()){
            String num = map.get(key);
            for (char n:num.toCharArray()){
                sum += Integer.valueOf(String.valueOf(n));
            }
            total = map.get(key)+total;
        }
        System.out.println(total);
        System.out.println(sum);
        long end = System.currentTimeMillis();
        System.out.print("总用时:"+(end-start)+"毫秒");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值