欧拉项目第16题 Power digit sum
来源:互联网 发布:mybatis显示sql语句 编辑:程序博客网 时间:2024/06/05 00:43
215 = 32768 and the sum of its digits is 3 + 2 + 7 + 6 + 8 = 26.
What is the sum of the digits of the number 21000?
求2的1000次方 值的各个位数上数值之和。
直接运算肯定是不行了,
思路是,把值直接分解成数组,如 :
<span style="white-space:pre"></span>map.put(1, new Integer[]{2}); map.put(2, new Integer[]{4}); map.put(3, new Integer[]{8}); map.put(4, new Integer[]{6,1});
循环处理,每次取上一个值,从个位数开始运算
public static void main(String... args) { long start = System.currentTimeMillis(); Map<Integer, Integer[]> map = new HashMap<Integer, Integer[]>(); map.put(1, new Integer[]{2}); map.put(2, new Integer[]{4}); map.put(3, new Integer[]{8}); map.put(4, new Integer[]{6,1}); Integer end = 1000; for(int i=4;i<end;i++){ Integer[] last = map.get(i); Integer xyz = (last[last.length-1] * 10 + last[last.length-2]) * 2; Integer[] this_=null; if(xyz > 99) { //计算本次数组位数 this_ = new Integer[last.length + 1]; } else { this_ = new Integer[last.length]; } int index=0; int is_u = 0;//处理下一位数是否需要+1 for(Integer la : last) { if(la*2 >= 10) {//*2 结果大于10,值减去10,下一位数 +1; this_[index] = la*2 % 10 + is_u; is_u = 1; } else { this_[index] = la*2 + is_u; is_u = 0; } index++; } if(is_u == 1) { this_[index] = is_u; } map.put(i + 1, this_); } Integer[] i_1000 = map.get(end); long xxxx = 0; for(Integer i : i_1000) { if(i == null) break; xxxx+=i; } System.out.println(System.currentTimeMillis() - start); System.out.println(xxxx); }
中间取数,有其他方法
<span style="white-space:pre"></span>for(int i=4;i<end;i++){ Integer[] last = map.get(i); Integer xyz = (last[last.length-1] * 10 + last[last.length-2]) * 2; Integer[] this_=null; if(xyz > 99) { //计算本次数组位数 this_ = new Integer[last.length + 1]; this_[last.length] = 1;//最后一位肯定是1 } else { this_ = new Integer[last.length]; } int index=0; for(Integer la : last) { if(index==0) { this_[index] = la*2%10; } else { int o = (last[index-1] + la*10)*2; //后两位数 * 2 ,取余100,除以10就是本次的值 this_[index]=(o % 100 )/10; } index++; } map.put(i + 1, this_); }
看到别人的思路,自己想复杂了,都忘了math.power()函数了。。。
<span style="white-space:pre"></span>BigInteger a = new BigInteger("2").pow(1000); String as = a.toString(); int out = 0; for (int i = 0; i < as.length(); ++i) { char c = as.charAt(i); out += (c-'0'); } System.out.println(out);
0 0
- 欧拉项目第16题 Power digit sum
- 欧拉项目 第20题 Factorial digit sum
- Problem 16:Power digit sum
- Problem 16:Power digit sum
- PE 16 Power digit sum
- Problem 16 Power digit sum
- 欧拉项目第13题 Large sum
- 欧拉项目第18题Maximum path sum I
- Project Euler 16: Power digit sum.
- Project Euler 题解 #16 Power digit sum
- projecteuler---->problem=16----Power digit sum
- Project Euler:Problem 16 Power digit sum
- 16 Power digit sum - Project Euler
- Project Euler Problem 16 Power digit sum
- ProjectEuler-Problem 16-Power digit sum
- project euler 16 Power digit sum
- 欧拉工程第25题:1000-digit Fibonacci number
- 欧拉工程第30题:Digit fifth powers
- C语言指针练习之矩形法求定积分
- 创新驱动的技术与管理
- 微信分享|如何在云中构建大规模分布式系统
- xUtils3.0使用介绍:数据库模块
- Tomcat 内存配置
- 欧拉项目第16题 Power digit sum
- requestLayout, invalidate和postInvalidate的异同
- keras:保存keras学习好的深度神经网络模型参数为二进制和txt文件
- C语言基础算法题之斐波那契数列
- JNI签名及System.loadLibrary()-android
- SlidingPaneLayout,DrawerLayout,ActionBar,NavigationView 详解 <三> NavigationView,DrawerLayout 结合ActionB
- HTTP和HTTPS的区别
- ios判读键盘是否出现和消失
- Computer Graphic & OpenGL