鱼C论坛

 找回密码
 立即注册
查看: 6509|回复: 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 | 显示全部楼层
def su(x):
        return sum([int(i) for i in  str(2**x)])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2016-6-14 00:12:33 | 显示全部楼层
x=2**1000
sum1=0
for i in str(x):
    sum1+=int(i)
print(sum1)

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

使用道具 举报

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

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

使用道具 举报

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

if __name__ == '__main__':
    print(euler(1000))
def euler(x):
    return eval('+'.join(list(str(2**x))))

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

使用道具 举报

发表于 2016-11-18 10:37:43 | 显示全部楼层
import time
t=time.clock()
def euler16(count=1000):
    """2**15 = 32768 并且其各位之和为 3+2+7+6+8 = 26, 2**1000 的各位之和为多少?"""
    return sum([int(n) for n in str(2**count)])
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
%题目16:2的1000次方的各位之和是多少?
function Output=Problem16(Input)
 tic
if nargin==0
    Input=1000;
end
Start=2;
for ii=1:Input-1
    Temp=Vector_Plus(Start,Start);
    Start=Temp;
end
toc
Output=sum(Start);
disp('此代码使用matlab编程')
disp(['Problem16所用时间为',num2str(toc),'秒'])
disp(['Problem16的答案为',num2str(Output)])

end
%% 子程序
%此程序实现两个向量的加法
function Output=Vector_Plus(a,b)
% if nargin==0
%     a=[9 9 9 9 9 9 ];
%     b=[2 0];
% end
L1=length(a);
L2=length(b);
L=max(L1,L2);
if L1<L2
   Span=L2-L1;
   Newa=[zeros(1,Span),a];
   Newb=b;
elseif L1>L2
   Span=L1-L2;
   Newa=a; 
   Newb=[zeros(1,Span),b];
else
    Newa=a;
    Newb=b;
end
Rank=Newa+Newb;
for ii=L:-1:2
    if Rank(ii)>=10
        Rank(ii)=Rank(ii)-10;
        Rank(ii-1)=Rank(ii-1)+1;
    end
end
Biggest=0;
while (Rank(1)>=10)
    if Rank(1)>=10
       Rank(1)=Rank(1)-10;
       Biggest=Biggest+1;
    end
end
if Biggest>0
    Output=[Biggest,Rank];
else
    Output=Rank;
end
end
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

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


start = time.clock()
print(digit_sum(1000))
end = time.clock()
print('程序执行了%fs。' %(end - start))
执行结果:
1366
程序执行了0.000237s。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-3 22:41:10 | 显示全部楼层
num = sum([int(i) for i in str(2 ** 1000) ])
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 | 显示全部楼层
num=2**1000
list1=[]
for i in str(num):
    list1.append(int(i))
print(sum(list1))
>>>
1366
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2017-9-13 14:51:27 | 显示全部楼层
temp = 2**1000
total = 0
for each in str(temp):
    total += int(each)
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 | 显示全部楼层
#include<stdio.h>
#include<time.h>
struct num  
{  
    int n[1000];  
        int len;
};
struct num *Multiplication(int x,struct num y)
{
        int i,temp,carry;
        for(i=0,carry=0;i<y.len;i++)
        {
                temp=y.n[i]*x+carry;
                y.n[i]=temp%10;
                carry=temp/10;
        }
        y.len=i;
        while(carry)
        {
                carry=carry%10;
                y.n[i++]=carry;
                carry=carry/10;
                y.len=i;
        }
        return &y;
}
int main()
{
        int i,x=2,sum=0;
        struct num y;
        y.n[0]=1;
        y.len=1;

        for(i=0;i<1000;i++)
        {
                y=*Multiplication(x,y);
        }
        printf("2的1000次方是:\n");
        for(i=y.len-1;i>=0;i--)
        {
                printf("%d",y.n[i]);
        }
        printf("\n");

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

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

使用道具 举报

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

int main()
{
        int sum=0;
        short dest[10001],add=0;
        memset(dest,0,20002);
        dest[10000]=1;
        bool flag1=0;
        for(int i=1;i<=1000;++i)
        {
                for(int j=10000;j>=1;--j)
                {
                        dest[j]=dest[j]*2+add;
                        if(dest[j]>9)
                        {
                                add=dest[j]/10;
                                dest[j]%=10;
                        }
                        else
                                add=0;
                }
        }
        for(short i:dest)
        {
                if(i!=0)
                {
                        flag1=true;
                }
                if(flag1)
                {
                        sum+=i;
                }
        }
        std::cout<<sum;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-30 08:59:18 | 显示全部楼层
print(sum([int(a) for a in str(2**1000)]))
python大数值计算还是省心
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-24 09:43:30 | 显示全部楼层
1366
def get_sum(n):
    return sum(int(each) for each in str(n))

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 03:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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