版块导航
正在加载中...
客户端APP下载
论文辅导
申博辅导
登录
注册
帖子
帖子
用户
本版
应《网络安全法》要求,自2017年10月1日起,未进行实名认证将不得使用互联网跟帖服务。为保障您的帐号能够正常使用,请尽快对帐号进行手机号验证,感谢您的理解与支持!
24小时热门版块排行榜
>
论坛更新日志
(4885)
>
虫友互识
(687)
>
文献求助
(380)
>
导师招生
(219)
>
休闲灌水
(187)
>
硕博家园
(151)
>
考博
(127)
>
招聘信息布告栏
(125)
>
论文投稿
(114)
>
博后之家
(95)
>
论文道贺祈福
(60)
>
基金申请
(56)
>
找工作
(54)
>
教师之家
(49)
>
绿色求助(高悬赏)
(45)
>
考研
(36)
小木虫论坛-学术科研互动平台
»
计算模拟区
»
程序语言
»
其它
»
Euler 工程第十六题:2的1000次方的各项和
15
2/2
返回列表
上一页
1
2
查看: 1951 | 回复: 14
只看楼主
@他人
存档
新回复提醒
(忽略)
收藏
在APP中查看
本帖产生 2 个 程序强帖 ,点击这里进行查看
libralibra
至尊木虫
(著名写手)
骠骑将军
程序强帖: 40
应助: 817
(博后)
金币: 12914.1
红花: 64
帖子: 2238
在线: 287.3小时
虫号: 696514
注册: 2009-02-05
专业: 计算机软件
★ ★ ★ ★
小木虫(金币
+0.5
):给个红包,谢谢回帖
微尘、梦想(金币+3): 谢谢参与! 2011-05-27 15:25:23
2**1000太大了,matlab不给力,只好混编,因为我喜欢tic/toc,虽然不精确,但是方便
matlab code
CODE:
%% What is the sum of the digits of the number 2^1000
function result = euler16()
tic;
!python -c "print sum([int(digit) for digit in str(2**1000)])";
toc;
end
结果
CODE:
% solved by invoking python script:
% 1366
% Elapsed time is 0.223183 seconds.
如果是python,就一句话,少了matlab调用,应该快不少
CODE:
import timeit
t = timeit.Timer('print sum([int(digit) for digit in str(2**1000)])')
print t.timeit(1)
结果时间
CODE:
1366
0.000781104861093
[
Last edited by libralibra on 2011-5-26 at 23:23
]
赞
一下
(2人)
回复此楼
matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
11楼
2011-05-26 23:17:11
已阅
回复此楼
关注TA
给TA发消息
送TA红花
TA的回帖
匿名
用户注销
(小有名气)
程序强帖: 3
应助: 2
(幼儿园)
金币: 607.7
散金: 150
红花: 2
帖子: 195
在线: 104小时
虫号: 0
注册: 2010-12-03
专业: 动力学与控制
★ ★ ★
小木虫(金币
+0.5
):给个红包,谢谢回帖
微尘、梦想(金币+2): 谢谢参与! 2011-05-27 15:25:36
本帖仅楼主可见
赞
一下
12楼
2011-05-26 23:44:27
已阅
申请程序强帖
回复此楼
编辑
查看我的主页
holmescn
金虫
(正式写手)
程序强帖: 37
应助: 1
(幼儿园)
金币: 1918.8
散金: 275
红花: 1
帖子: 699
在线: 102.6小时
虫号: 913482
注册: 2009-11-26
性别: GG
专业: 凝聚态物性 II :电子结构
★ ★
微尘、梦想(金币+2, 程序强帖+1): 谢谢交流讨论! 2011-05-29 16:21:27
和楼上算法一样,用C实现了一下。不过,如果用4或者8作为底数,应该会快一点点。
当然不用的话,也不慢。
CODE:
#include
int main(int argc, char** argv) {
char digits[500];
int len = 1;
int c = 0;
int r = 0;
int i, j;
digits[0] = 1;
for (i = 0; i < 1000; i++) {
c = 0;
for (j = 0; j < len; j++) {
r = digits[j]*2 + c;
c = r / 10;
digits[j] = r % 10;
}
if(c > 0) {
digits[len] = c;
len += 1;
}
}
printf("digits len = %d\n", len);
r = 0;
for(i = len - 1; i >= 0; i--) {
r += digits[i];
printf("%d", digits[i]);
}
printf("\nsum = %d\n", r);
return 0;
}
赞
一下
(1人)
回复此楼
13楼
2011-05-27 17:01:32
已阅
回复此楼
关注TA
给TA发消息
送TA红花
TA的回帖
wangww2011
木虫
(著名写手)
程序强帖: 13
应助: 11
(小学生)
金币: 4023.1
散金: 2709
红花: 18
沙发: 1
帖子: 1915
在线: 1537.1小时
虫号: 772953
注册: 2009-05-17
性别: GG
专业: 凝聚态物性 II :电子结构
★ ★ ★
小木虫(金币
+0.5
):给个红包,谢谢回帖
微尘、梦想(金币+2, 程序强帖+1): 谢谢交流讨论! 2011-05-29 16:22:05
楼上的看着很不错
这里贴个丑陋的代码 时间0.0000s
CODE:
1366
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376
elapsed time=0.000000 seconds.
代码:
CODE:
#include
#include
#include
#define TIMERSTART clock_t start_time,stop_time;double elapsed_time;start_time = clock();
#define TIMERSTOP stop_time = clock();elapsed_time=(double)(stop_time-start_time)/CLOCKS_PER_SEC;printf("elapsed time=%f seconds.\n",elapsed_time);
#define N 100
static int num[N];
void multiply(int n) {
int i=0,tmp,residual=0;
for(i=0;i
tmp=num[i]*n+residual;
num[i]=tmp%10000;
residual=(tmp-num[i])/10000;
}
return;
}
int euler16(int n){
int i,sum=0;
for(i=1;i
multiply(2);
}
for(i=0;i
sum+=(num[i]/1000+(num[i]%1000)/100+(num[i]%100)/10+num[i]%10);
}
return sum;
}
int main(void){
int i;
TIMERSTART;
num[0]=1;
printf("%d\n",euler16(1000));
for(i=N-1;i>=0;i--){
printf("%04d",num[i]);
}
printf("\n");
TIMERSTOP;
return 0;
}
赞
一下
(2人)
回复此楼
14楼
2011-05-27 21:05:42
已阅
回复此楼
关注TA
给TA发消息
送TA红花
TA的回帖
holmescn
金虫
(正式写手)
程序强帖: 37
应助: 1
(幼儿园)
金币: 1918.8
散金: 275
红花: 1
帖子: 699
在线: 102.6小时
虫号: 913482
注册: 2009-11-26
性别: GG
专业: 凝聚态物性 II :电子结构
★ ★ ★ ★ ★
微尘、梦想(金币+5): 谢谢交流! 2011-05-29 16:22:21
LS的代码确实有点 quick & dirty。不过, 如果你理解了我的意思的话,可以写出如下更高效的代码。
CODE:
#include
int multiply(char* digits, int len, int factor, int times) {
int i, j;
int c, r;
for(i = 0; i < times; i++) {
c = 0;
for(j = 0; j < len; j++) {
r = digits[j] * factor + c;
c = r / 10;
digits[j] = r % 10;
}
if (c > 0) {
digits[len] = c;
len += 1;
}
}
return len;
}
int main(int argc, char** argv) {
char digits[500];
int len = 1;
int r, i;
digits[0] = 1;
len = multiply(digits, len, 8, 333);
len = multiply(digits, len, 2, 1);
printf("digits len = %d\n", len);
r = 0;
for(i = len - 1; i >= 0; i--) {
r += digits[i];
printf("%d", digits[i]);
}
printf("\nsum = %d\n", r);
return 0;
}
赞
一下
(1人)
回复此楼
15楼
2011-05-28 07:26:45
已阅
回复此楼
关注TA
给TA发消息
送TA红花
TA的回帖
相关版块跳转
第一性原理
量子化学
计算模拟
分子模拟
仿真模拟
程序语言
我要订阅楼主
holmescn
的主题更新
15
2/2
返回列表
上一页
1
2
如果回帖内容含有宣传信息,请如实选中。否则帐号将被全论坛禁言
普通表情
龙
兔
虎
猫
高级回复
(可上传附件)
百度网盘
|
360云盘
|
千易网盘
|
华为网盘
在新窗口页面中打开自己喜欢的网盘网站,将文件上传后,然后将下载链接复制到帖子内容中就可以了。
信息提示
关闭
请填处理意见
关闭
确定