【编程题】求:2的1000方的各位数字之和

zhuyx808 2009-09-15 09:33:00
2^1000 的各位数字之和是多少?编程如何解决?

可能意思很难理解,举个例子:2的4次方=16,那么2的4次方的各位数字之和为1+6=7,现在问你2的1000次方之和是多少,如何编程解决?
...全文
437 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
sun1950 2009-09-15
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 justinavril 的回复:]
引用 13 楼 sun1950 的回复:
长见识了~第一次看见用BigInteger~
结果也一样    1366


不是吧。。。
[/Quote]

import java.math.BigInteger;


public class Test {
public static void main(String[] args) {

BigInteger two = BigInteger.valueOf(2);
BigInteger pow = two.pow(1000);

String str= pow.toString();
int sum = 0;
for(int i = 0; i < str.length(); i++){
sum = sum + str.charAt(i) - '0';
}
System.out.println(sum);
}
}
是一样的..
justinavril 2009-09-15
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 sun1950 的回复:]
长见识了~第一次看见用BigInteger~
结果也一样    1366

[/Quote]
不是吧。。。
feng_jyie 2009-09-15
  • 打赏
  • 举报
回复
512 8
高手都不想回答这个问题,我不是高手。
sun1950 2009-09-15
  • 打赏
  • 举报
回复
长见识了~第一次看见用BigInteger~
结果也一样 1366


justinavril 2009-09-15
  • 打赏
  • 举报
回复
这估计是个什么面试题之类的 就怕来一句不让用Java的api
[Quote=引用 11 楼 shine333 的回复:]
引用 10 楼 sun1950 的回复:
引用 5 楼 zhuyx808 的回复:
引用 3 楼 sun1950 的回复:
  JAVA不好解决,测了下LONG到2的62次方就是极限了,再多就溢出了。

  如果是2的4次方的各位数字之和我就不让你编了

处女回复被鄙视了...
根据4楼提供的思路:
public class Test {
public static void main(String[] args) {

int[] array = new int[350];
array[0] = 1;
boolean addOne = false;
for(int i = 0; i  < 1000; i++){
for(int j = 0; j  < 350; j++){
int number = array[j] * 2;
if(addOne)
number++;
if(number > 9){
array[j] = number % 10;
addOne = true;
}else{
array[j] = number;
addOne = false;
}
}
int sum = 0;
for(int k = 0; k  < 350; k++){
sum += array[k];
}
System.out.println(i + ":  " + sum);
}
// for(int m = 0; m  < 350; m++){
// System.out.println(m + ":" + array[m]);
// }
}
}
结果是1366

直接用BigInteger
Java code
BigInteger two= BigInteger.valueOf(2);
BigInteger pow= two.pow(1000);
[/Quote]
shine333 2009-09-15
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 sun1950 的回复:]
引用 5 楼 zhuyx808 的回复:
引用 3 楼 sun1950 的回复:
JAVA不好解决,测了下LONG到2的62次方就是极限了,再多就溢出了。

如果是2的4次方的各位数字之和我就不让你编了

处女回复被鄙视了...
根据4楼提供的思路:
public class Test {
public static void main(String[] args) {

int[] array = new int[350];
array[0] = 1;
boolean addOne = false;
for(int i = 0; i < 1000; i++){
for(int j = 0; j < 350; j++){
int number = array[j] * 2;
if(addOne)
number++;
if(number > 9){
array[j] = number % 10;
addOne = true;
}else{
array[j] = number;
addOne = false;
}
}
int sum = 0;
for(int k = 0; k < 350; k++){
sum += array[k];
}
System.out.println(i + ":  " + sum);
}
// for(int m = 0; m < 350; m++){
// System.out.println(m + ":" + array[m]);
// }
}
}
结果是1366
[/Quote]
直接用BigInteger

BigInteger two = BigInteger.valueOf(2);
BigInteger pow = two.pow(1000);
sun1950 2009-09-15
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhuyx808 的回复:]
引用 3 楼 sun1950 的回复:
JAVA不好解决,测了下LONG到2的62次方就是极限了,再多就溢出了。

如果是2的4次方的各位数字之和我就不让你编了
[/Quote]
处女回复被鄙视了...
根据4楼提供的思路:
public class Test {
public static void main(String[] args) {

int[] array = new int[350];
array[0] = 1;
boolean addOne = false;
for(int i = 0; i < 1000; i++){
for(int j = 0; j < 350; j++){
int number = array[j] * 2;
if(addOne)
number++;
if(number > 9){
array[j] = number % 10;
addOne = true;
}else{
array[j] = number;
addOne = false;
}
}
int sum = 0;
for(int k = 0; k < 350; k++){
sum += array[k];
}
System.out.println(i + ": " + sum);
}
// for(int m = 0; m < 350; m++){
// System.out.println(m + ":" + array[m]);
// }
}
}
结果是1366
bayougeng 2009-09-15
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 yubangqi 的回复:]
先求出2^1000 是多少,再算各位数之和,可能效率有点低了
[/Quote]

出题者肯定不是这个意思。要是这个意思的话,直接问你2^1000是多少不就完了么?加法谁都会。
想想,有什么规律呢。
ctlu2ct2t 2009-09-15
  • 打赏
  • 举报
回复
要精确求吗?!
试试java.math.BigInteger类看看!
java.math.BigDecimal 精确计算的!
最后是2进制的数组了!toString再一个一个加吧!
yubangqi 2009-09-15
  • 打赏
  • 举报
回复
先求出2^1000 是多少,再算各位数之和,可能效率有点低了
dz007 2009-09-15
  • 打赏
  • 举报
回复
2^969个2^31相加,用笔算加起来就行了吧……
zhuyx808 2009-09-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sun1950 的回复:]
JAVA不好解决,测了下LONG到2的62次方就是极限了,再多就溢出了。
[/Quote]
如果是2的4次方的各位数字之和我就不让你编了
justinavril 2009-09-15
  • 打赏
  • 举报
回复
提供思路吧:可以用数组去模拟一个数,最低位就对应个位,一旦个位超过9就进位,依次这样。最后从高到底输出数组就好了。
sun1950 2009-09-15
  • 打赏
  • 举报
回复
JAVA不好解决,测了下LONG到2的62次方就是极限了,再多就溢出了。
zhuyx808 2009-09-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 cclovescw 的回复:]
是不是你自己想出来的?
[/Quote]

是不是我想出来的重要吗?重要的是解决问题


ps:确实不是我想出来的,是在一个别的语言的邮件列表里看到的,后来想了想如果用java的话如何实现
  • 打赏
  • 举报
回复
是不是你自己想出来的?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧