2008-04-08 Ruby 测试题(00010)

(2<<999).to_s.split('').inject(0){|k,v| k+=v.to_i}

=> 1366
product = 2**1000
sum = 0
while product != 0
 sum += product % 10
 product /= 10
end

puts sum
学习ing
以前做高精度的时候,是用数组存储数,模拟笔算实现的!以下阶乘的c代码实现:

#include "stdio.h" 

int n; 
int a[2000],b[2000]; 

void mult(int i,int m) 
{
    int j; 
    for(j=1;j<=i;j++) 
        a[j]=a[j]*m; 
    for (j=1;j<i+4;j++) 
    {
        a[j+1]+=a[j]/10; a[j]=a[j]%10; 
    } 


void prnt(void) 
{
    int i,j; 
    for (j=2000;a[j]==0;j--); 
    for (i=1;i<=j;i++) 
    {
        printf("%1d",a[j-i+1]); 
        if(i%50 ==0)
            printf("\n"); 
    } 
    printf("\n"); 


main() 
{
    int i,j; 
    printf("input n:\n"); 
    scanf("%d",&n);
    for(i=2;i<2000;i++)        
        a=0;    
    a[1]=1; 
    j=1; 
    for(i=2;i<=n;i++)        
    {
        mult(j,i);    
        for (j=2000;a[j]==0;j--); 
    } 
    prnt(); 
}

[ 本帖最后由 idoit 于 2008-4-20 11:15 编辑 ]
我来看看
dddddddddddddddddddddddddd
看看是什么算法。呵呵
跟我的想法一样,这个题目比较好。
本帖隐藏的内容需要回复才可以浏览
学习一下