24小时热门版块排行榜    

Znn3bq.jpeg
北京石油化工学院2026年研究生招生接收调剂公告
查看: 2226  |  回复: 14
本帖产生 2 个 程序强帖 ,点击这里进行查看

libralibra

至尊木虫 (著名写手)

骠骑将军

★ ★ ★ ★
小木虫(金币+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 ]
matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
11楼2011-05-26 23:17:11
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

匿名

用户注销 (小有名气)

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
微尘、梦想(金币+2): 谢谢参与! 2011-05-27 15:25:36
本帖仅楼主可见
12楼2011-05-26 23:44:27
已阅   申请程序强帖   回复此楼   编辑   查看我的主页

holmescn

金虫 (正式写手)

★ ★
微尘、梦想(金币+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;
}

13楼2011-05-27 17:01:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wangww2011

木虫 (著名写手)

★ ★ ★
小木虫(金币+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;
}

14楼2011-05-27 21:05:42
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

holmescn

金虫 (正式写手)

★ ★ ★ ★ ★
微尘、梦想(金币+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;
}

15楼2011-05-28 07:26:45
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 holmescn 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 331求调剂 +3 luoxin0706. 2026-04-08 3/150 2026-04-08 17:20 by -迷了路啊路
[考研] 机械工程264学硕求调剂 +3 qiushangxian 2026-04-06 3/150 2026-04-08 01:53 by Linzejun
[考研] 一志愿西电085401求调剂 +4 sunw1306 2026-04-07 4/200 2026-04-07 16:40 by 啵啵啵0119
[考研] 学硕化学工程与技术,一志愿中国海洋大学320+求调剂 +9 披星河 2026-04-02 9/450 2026-04-07 12:53 by 尽舜尧1
[考研] 312求调剂 +4 LR6 2026-04-06 4/200 2026-04-07 08:42 by jp9609
[考研] 机械专硕274求调剂,不挑专业学校 +6 泛泛2333 2026-04-05 8/400 2026-04-06 18:06 by 泛泛2333
[考研] 材料工程310专硕调剂 +14 捞捞我…. 2026-04-04 15/750 2026-04-06 14:18 by lqwchd
[考研] 复试调剂 +5 asdasdassda 2026-04-05 5/250 2026-04-06 09:32 by dongzh2009
[考研] 求调剂 +10 Hll胡 2026-04-04 10/500 2026-04-05 20:09 by nepu_uu
[考研] 323求调剂 +8 李佳乐1 2026-04-04 8/400 2026-04-04 22:26 by hemengdong
[考研] 278求调剂 +14 范婷娜 2026-04-04 15/750 2026-04-04 22:15 by lqwchd
[考研] 085600调剂 +4 1amJJ 2026-04-02 4/200 2026-04-04 21:53 by hemengdong
[论文投稿] 求文献 5+3 ys879651$ 2026-04-02 3/150 2026-04-04 17:22 by bobvan
[考研] 317分 一志愿江南大学 化学工程学硕 求调剂 +6 YinTai 2026-04-03 6/300 2026-04-03 22:30 by 无际的草原
[考研] 286求调剂 +8 lim0922 2026-04-02 8/400 2026-04-03 20:19 by rzh123456
[考研] 274求调剂 +9 顺理成张 2026-04-03 10/500 2026-04-03 15:10 by 啊俊!
[考研] 求调剂 +4 15064154688 2026-04-03 5/250 2026-04-03 15:07 by zrongyan
[考研] 求调剂22408 288分 +5 new382 2026-04-02 5/250 2026-04-03 09:13 by 醉在风里
[考研] 一志愿北京科技大学085601材料工程英一数二初试总分335求调剂 +8 双马尾痞老板2 2026-04-02 9/450 2026-04-02 14:45 by 5896
[考研] 一志愿北交大材料工程总分358 +3 cs0106 2026-04-02 5/250 2026-04-02 11:37 by olim
信息提示
请填处理意见