题目16:2的1000次方的各位之和是多少?
本帖最后由 不二如是 于 2017-6-12 22:31 编辑Power digit sum
题目:
答案是:1366。 def su(x):
return sum() x=2**1000
sum1=0
for i in str(x):
sum1+=int(i)
print(sum1)
1366 temp = 2**1000
total = 0
for i in str(temp):
total += int(i)
print(total)
1366 本帖最后由 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)) 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 此代码使用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 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。 num = sum()
print('答案是: ' + str(num))
送分题一行 fc1735 发表于 2016-11-27 16:49
所用时间 : 0.000094秒
这是什么语言? num=2**1000
list1=[]
for i in str(num):
list1.append(int(i))
print(sum(list1))
>>>
1366 结果:1366
代码:
sum() temp = 2**1000
total = 0
for each in str(temp):
total += int(each)
print(total) 也不能说你们的答案不对,但是感觉欧拉计划里面的很多问题如果用Python就太简单了,尤其是当涉及到大数的时候。很多时候,溢出越界之类的问题在Python里面几乎都不需要考虑。 #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;
} #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;
}
print(sum())
python大数值计算还是省心 1366
def get_sum(n):
return sum(int(each) for each in str(n))
print(get_sum(2**1000)) 本帖最后由 永恒的蓝色梦想 于 2020-5-21 16:09 编辑
print(sum(map(int, str(2**1000))))
页:
[1]
2