24小时热门版块排行榜    

查看: 2175  |  回复: 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 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 085601材料工程专硕求调剂 +10 慕寒mio 2026-03-16 10/500 2026-03-19 15:26 by 丁丁*
[考研] 求调剂,一志愿:南京航空航天大学大学 ,080500材料科学与工程学硕,总分289分 +3 @taotao 2026-03-19 3/150 2026-03-19 14:07 by peike
[考研] 0703化学调剂 +8 妮妮ninicgb 2026-03-15 12/600 2026-03-19 05:55 by anny19840123
[考研] 311求调剂 +6 26研0 2026-03-15 6/300 2026-03-18 14:43 by haxia
[考研] 302求调剂 +10 呼呼呼。。。。 2026-03-17 10/500 2026-03-18 12:45 by Linda Hu
[考博] 环境领域全国重点实验室招收博士1-2名 +3 QGZDSYS 2026-03-13 5/250 2026-03-18 11:13 by QGZDSYS
[考研] 0703化学调剂 +3 妮妮ninicgb 2026-03-17 3/150 2026-03-18 10:29 by macy2011
[考研] 工科材料085601 279求调剂 +6 困于星晨 2026-03-17 6/300 2026-03-18 10:21 by kkcoco25
[考研] 265求调剂 +3 梁梁校校 2026-03-17 3/150 2026-03-18 09:12 by zhukairuo
[考研] 301求调剂 +9 yy要上岸呀 2026-03-17 9/450 2026-03-18 08:58 by 无际的草原
[考研] 278求调剂 +5 烟火先于春 2026-03-17 5/250 2026-03-18 08:43 by 星空星月
[考研] 26考研求调剂 +6 丶宏Sir 2026-03-13 6/300 2026-03-17 16:13 by 醉在风里
[考研] 302求调剂 +4 小贾同学123 2026-03-15 8/400 2026-03-17 10:33 by 小贾同学123
[考研] 一志愿,福州大学材料专硕339分求调剂 +3 木子momo青争 2026-03-15 3/150 2026-03-17 07:52 by laoshidan
[考研] 085600材料与化工 求调剂 +13 enenenhui 2026-03-13 14/700 2026-03-16 15:19 by 了了了了。。
[考研] 26考研一志愿中国石油大学(华东)305分求调剂 +3 嘉年新程 2026-03-15 3/150 2026-03-15 13:58 by 哈哈哈哈嘿嘿嘿
[考研] 中科大材料与化工319求调剂 +3 孟鑫材料 2026-03-14 3/150 2026-03-14 20:10 by ms629
[考研] 复试调剂 +4 z1z2z3879 2026-03-14 5/250 2026-03-14 16:30 by JourneyLucky
[考研] 308求调剂 +3 是Lupa啊 2026-03-12 3/150 2026-03-13 14:30 by 求调剂zz
[考研] 一志愿山大07化学 332分 四六级已过 本科山东双非 求调剂! +3 不想理你 2026-03-12 3/150 2026-03-13 14:18 by JourneyLucky
信息提示
请填处理意见