鱼C论坛

 找回密码
 立即注册
查看: 5448|回复: 32

题目16:2的1000次方的各位之和是多少?

[复制链接]
发表于 2015-4-21 16:36:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 不二如是 于 2017-6-12 22:31 编辑
Power digit sum

BaiduShurufa_2015-4-21_16-37-22.png

题目:

BaiduShurufa_2015-4-21_16-37-7.png

评分

参与人数 1鱼币 +1 收起 理由
cwhsmile + 1 这题简单,没什么难度

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-4-21 20:08:57 | 显示全部楼层
答案是:1366。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-26 12:25:51 | 显示全部楼层
  1. def su(x):
  2.         return sum([int(i) for i in  str(2**x)])
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2016-6-14 00:12:33 | 显示全部楼层
  1. x=2**1000
  2. sum1=0
  3. for i in str(x):
  4.     sum1+=int(i)
  5. print(sum1)
复制代码


1366
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-2 11:50:49 | 显示全部楼层
  1. temp = 2**1000
  2. total = 0
  3. for i in str(temp):
  4.       total += int(i)

  5. print(total)
复制代码

1366
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-10-16 11:57:09 | 显示全部楼层
本帖最后由 776667 于 2016-10-16 12:11 编辑
  1. def euler(x):
  2.     return sum([int(i) for i in str(2**x)])

  3. if __name__ == '__main__':
  4.     print(euler(1000))
复制代码

  1. def euler(x):
  2.     return eval('+'.join(list(str(2**x))))

  3. if __name__ == '__main__':
  4.     print(euler(1000))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-18 10:37:43 | 显示全部楼层
  1. import time
  2. t=time.clock()
  3. def euler16(count=1000):
  4.     """2**15 = 32768 并且其各位之和为 3+2+7+6+8 = 26, 2**1000 的各位之和为多少?"""
  5.     return sum([int(n) for n in str(2**count)])
  6. print(euler16(1000), '--time: ',time.clock()-t)
复制代码


1366 --time:  0.00032443956486325214
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-14 22:07:53 | 显示全部楼层
此代码使用matlab编程
Problem16所用时间为0.034033秒
Problem16的答案为1366
  1. %题目16:2的1000次方的各位之和是多少?
  2. function Output=Problem16(Input)
  3. tic
  4. if nargin==0
  5.     Input=1000;
  6. end
  7. Start=2;
  8. for ii=1:Input-1
  9.     Temp=Vector_Plus(Start,Start);
  10.     Start=Temp;
  11. end
  12. toc
  13. Output=sum(Start);
  14. disp('此代码使用matlab编程')
  15. disp(['Problem16所用时间为',num2str(toc),'秒'])
  16. disp(['Problem16的答案为',num2str(Output)])

  17. end
  18. %% 子程序
  19. %此程序实现两个向量的加法
  20. function Output=Vector_Plus(a,b)
  21. % if nargin==0
  22. %     a=[9 9 9 9 9 9 ];
  23. %     b=[2 0];
  24. % end
  25. L1=length(a);
  26. L2=length(b);
  27. L=max(L1,L2);
  28. if L1<L2
  29.    Span=L2-L1;
  30.    Newa=[zeros(1,Span),a];
  31.    Newb=b;
  32. elseif L1>L2
  33.    Span=L1-L2;
  34.    Newa=a;
  35.    Newb=[zeros(1,Span),b];
  36. else
  37.     Newa=a;
  38.     Newb=b;
  39. end
  40. Rank=Newa+Newb;
  41. for ii=L:-1:2
  42.     if Rank(ii)>=10
  43.         Rank(ii)=Rank(ii)-10;
  44.         Rank(ii-1)=Rank(ii-1)+1;
  45.     end
  46. end
  47. Biggest=0;
  48. while (Rank(1)>=10)
  49.     if Rank(1)>=10
  50.        Rank(1)=Rank(1)-10;
  51.        Biggest=Biggest+1;
  52.     end
  53. end
  54. if Biggest>0
  55.     Output=[Biggest,Rank];
  56. else
  57.     Output=Rank;
  58. end
  59. end
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-2-7 12:27:10 | 显示全部楼层
  1. import time

  2. def digit_sum(number):
  3.     '求2的number次方的各位之和'
  4.     result = 0
  5.     for i in str(2 ** number):
  6.         result += int(i)
  7.     return result


  8. start = time.clock()
  9. print(digit_sum(1000))
  10. end = time.clock()
  11. print('程序执行了%fs。' %(end - start))
复制代码

执行结果:
1366
程序执行了0.000237s。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-3 22:41:10 | 显示全部楼层
  1. num = sum([int(i) for i in str(2 ** 1000) ])
  2. print('答案是: ' + str(num))
复制代码


送分题一行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-15 09:18:44 | 显示全部楼层
fc1735 发表于 2016-11-27 16:49
所用时间 : 0.000094秒

这是什么语言?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-15 09:20:13 | 显示全部楼层
  1. num=2**1000
  2. list1=[]
  3. for i in str(num):
  4.     list1.append(int(i))
  5. print(sum(list1))
复制代码

>>>
1366
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-7 00:01:15 | 显示全部楼层
结果:1366
代码:
  1. sum([int(x) for x in str(2**1000)])
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-13 14:51:27 | 显示全部楼层
  1. temp = 2**1000
  2. total = 0
  3. for each in str(temp):
  4.     total += int(each)
  5. print(total)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-10 14:51:39 | 显示全部楼层
也不能说你们的答案不对,但是感觉欧拉计划里面的很多问题如果用Python就太简单了,尤其是当涉及到大数的时候。很多时候,溢出越界之类的问题在Python里面几乎都不需要考虑。

点评

牺牲了效率,换取了方便  发表于 2020-8-31 07:32
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-3-21 21:15:03 | 显示全部楼层
  1. #include<stdio.h>
  2. #include<time.h>
  3. struct num  
  4. {  
  5.     int n[1000];  
  6.         int len;
  7. };
  8. struct num *Multiplication(int x,struct num y)
  9. {
  10.         int i,temp,carry;
  11.         for(i=0,carry=0;i<y.len;i++)
  12.         {
  13.                 temp=y.n[i]*x+carry;
  14.                 y.n[i]=temp%10;
  15.                 carry=temp/10;
  16.         }
  17.         y.len=i;
  18.         while(carry)
  19.         {
  20.                 carry=carry%10;
  21.                 y.n[i++]=carry;
  22.                 carry=carry/10;
  23.                 y.len=i;
  24.         }
  25.         return &y;
  26. }
  27. int main()
  28. {
  29.         int i,x=2,sum=0;
  30.         struct num y;
  31.         y.n[0]=1;
  32.         y.len=1;

  33.         for(i=0;i<1000;i++)
  34.         {
  35.                 y=*Multiplication(x,y);
  36.         }
  37.         printf("2的1000次方是:\n");
  38.         for(i=y.len-1;i>=0;i--)
  39.         {
  40.                 printf("%d",y.n[i]);
  41.         }
  42.         printf("\n");

  43.         for(i=0;i<y.len;i++)
  44.         {
  45.                 sum=sum+y.n[i];
  46.         }
  47.         printf("其各位之和为%d\n",sum);

  48.     return 0;
  49. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-28 19:29:48 | 显示全部楼层
  1. #include <iostream>
  2. #include <cstring>

  3. int main()
  4. {
  5.         int sum=0;
  6.         short dest[10001],add=0;
  7.         memset(dest,0,20002);
  8.         dest[10000]=1;
  9.         bool flag1=0;
  10.         for(int i=1;i<=1000;++i)
  11.         {
  12.                 for(int j=10000;j>=1;--j)
  13.                 {
  14.                         dest[j]=dest[j]*2+add;
  15.                         if(dest[j]>9)
  16.                         {
  17.                                 add=dest[j]/10;
  18.                                 dest[j]%=10;
  19.                         }
  20.                         else
  21.                                 add=0;
  22.                 }
  23.         }
  24.         for(short i:dest)
  25.         {
  26.                 if(i!=0)
  27.                 {
  28.                         flag1=true;
  29.                 }
  30.                 if(flag1)
  31.                 {
  32.                         sum+=i;
  33.                 }
  34.         }
  35.         std::cout<<sum;
  36. }
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-30 08:59:18 | 显示全部楼层
  1. print(sum([int(a) for a in str(2**1000)]))
复制代码

python大数值计算还是省心
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-24 09:43:30 | 显示全部楼层
1366

  1. def get_sum(n):
  2.     return sum(int(each) for each in str(n))

  3. print(get_sum(2**1000))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-3 20:27:33 | 显示全部楼层
本帖最后由 永恒的蓝色梦想 于 2020-5-21 16:09 编辑
  1. print(sum(map(int, str(2**1000))))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 14:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表