欧拉计划 发表于 2015-4-21 16:36:17

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

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

Power digit sum


题目:



s1986qq 发表于 2015-4-21 20:08:57

答案是:1366。

瞬秒爆加速 发表于 2015-4-26 12:25:51

def su(x):
        return sum()

huomqh 发表于 2016-6-14 00:12:33

x=2**1000
sum1=0
for i in str(x):
    sum1+=int(i)
print(sum1)

1366

愤怒的大头菇 发表于 2016-9-2 11:50:49

temp = 2**1000
total = 0
for i in str(temp):
      total += int(i)

print(total)

1366

776667 发表于 2016-10-16 11:57:09

本帖最后由 776667 于 2016-10-16 12:11 编辑

def euler(x):
    return sum()

if __name__ == '__main__':
    print(euler(1000))


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

if __name__ == '__main__':
    print(euler(1000))

lyciam 发表于 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()
print(euler16(1000), '--time: ',time.clock()-t)

1366 --time:0.00032443956486325214

渡风 发表于 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=;
%   b=;
% end
L1=length(a);
L2=length(b);
L=max(L1,L2);
if L1<L2
   Span=L2-L1;
   Newa=;
   Newb=b;
elseif L1>L2
   Span=L1-L2;
   Newa=a;
   Newb=;
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=;
else
    Output=Rank;
end
end

FlySelf 发表于 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。

marmot 发表于 2017-3-3 22:41:10

num = sum()
print('答案是: ' + str(num))

送分题一行

99592938 发表于 2017-3-15 09:18:44

fc1735 发表于 2016-11-27 16:49
所用时间 : 0.000094秒

这是什么语言?

99592938 发表于 2017-3-15 09:20:13

num=2**1000
list1=[]
for i in str(num):
    list1.append(int(i))
print(sum(list1))
>>>
1366

凌晨分子 发表于 2017-4-7 00:01:15

结果:1366
代码:
sum()

BngThea 发表于 2017-9-13 14:51:27

temp = 2**1000
total = 0
for each in str(temp):
    total += int(each)
print(total)

JonTargaryen 发表于 2017-10-10 14:51:39

也不能说你们的答案不对,但是感觉欧拉计划里面的很多问题如果用Python就太简单了,尤其是当涉及到大数的时候。很多时候,溢出越界之类的问题在Python里面几乎都不需要考虑。

由我们主宰 发表于 2018-3-21 21:15:03

#include<stdio.h>
#include<time.h>
struct num
{
    int n;
        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*x+carry;
                y.n=temp%10;
                carry=temp/10;
        }
        y.len=i;
        while(carry)
        {
                carry=carry%10;
                y.n=carry;
                carry=carry/10;
                y.len=i;
        }
        return &y;
}
int main()
{
        int i,x=2,sum=0;
        struct num y;
        y.n=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);
        }
        printf("\n");

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

    return 0;
}

zzzgod 发表于 2018-6-28 19:29:48

#include <iostream>
#include <cstring>

int main()
{
        int sum=0;
        short dest,add=0;
        memset(dest,0,20002);
        dest=1;
        bool flag1=0;
        for(int i=1;i<=1000;++i)
        {
                for(int j=10000;j>=1;--j)
                {
                        dest=dest*2+add;
                        if(dest>9)
                        {
                                add=dest/10;
                                dest%=10;
                        }
                        else
                                add=0;
                }
        }
        for(short i:dest)
        {
                if(i!=0)
                {
                        flag1=true;
                }
                if(flag1)
                {
                        sum+=i;
                }
        }
        std::cout<<sum;
}

塔利班 发表于 2018-8-30 08:59:18

print(sum())
python大数值计算还是省心

王小召 发表于 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))

永恒的蓝色梦想 发表于 2019-8-3 20:27:33

本帖最后由 永恒的蓝色梦想 于 2020-5-21 16:09 编辑

print(sum(map(int, str(2**1000))))
页: [1] 2
查看完整版本: 题目16:2的1000次方的各位之和是多少?