24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1952  |  回复: 14
本帖产生 2 个 程序强帖 ,点击这里进行查看
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

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的回帖

智能机器人

Robot (super robot)

我们都爱小木虫

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 的主题更新
普通表情 高级回复(可上传附件)
信息提示
请填处理意见