幂的数字和

来源:互联网 发布:语音翻译软件 编辑:程序博客网 时间:2024/05/16 10:41

幂的数字和
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
原创粉丝点击