项目欧拉编号48

时间:2011-12-20 08:07:40

标签: c

这是问题陈述。

该系列,1 ^ 1 + 2 ^ 2 + 3 ^ 3 + ... + 10 ^ 10 = 10405071317。

查找该系列的最后十位数字,1 ^ 1 + 2 ^ 2 + 3 ^ 3 + ... + 1000 ^ 1000?

这个问题很简单。 我写的代码可以正确找到所有单独的数字(即(1 ^ 1,2 ^ 2,... 997 ^ 997等,它们都是正确的,因为我使用WolframAlpha检查):) 当我尝试添加所有这些数字时发生故障。我的程序总是输出0。 我已经多次阅读它,并且无论如何都无法找到错误。

PS-由于此处的数字太大,我已将各个数字存储在数组中。 代码

#include<stdio.h>
int n[1001][3001]={};
int sum[3001]={};
int raisedto(int q)
{
    int i,j;    
    //int digit;
    int carry=0;
    int carry1=0;
    n[q][0]=q;
    for(i=0;i<q-1;i++)
    {

    for(j=0;j<3001;j++)
    {
        carry=(q*n[q][j]+carry1)/10;
        n[q][j]=((q*n[q][j])+carry1)%10;
        carry1=carry;
    }
    carry1=0;
    carry=0;
    }
return(0);      
}
int sumof()
{
    int i,j,carry=0,carry1=0;
    for(i=0;i<1001;i=i+2)
    {
        for(j=0;j<3001;j++)
        {
            carry=(n[i][j]+n[i+1][j]+carry1)/10;
            sum[j]=(n[i][j]+n[i+1][j]+carry1)%10;
            carry1=carry;
        }   
        carry1=0;
        carry=0;

    }   
    return(0);
}       
int main(void)
{
    int j,i;
    for(i=0;i<1001;i++)
    {
    printf("%d",i);
    raisedto(i);
    }
    printf("\n");
    sumof();

    for(j=0;j<3001;j++)
    {
        printf("%d",sum[j]);
    }   
    printf("done");
    return(0);
}

1 个答案:

答案 0 :(得分:1)

你是对的,你的sumof()功能错了......

int sumof()
{
    int i,j,carry=0,s = 0;
    for(i=0;i<3001;i++) //iterate each column (as in digit)
    {
        s = carry;
        for(j=0;j<1000;j++) //sum all the columns  (ie add all units places, then tenths place)
        {
            s+=n[j][i];
        }   
        carry = s / 10; //store carry
        sum[i] = s % 10; //store last digit as the sum
    }   
    return(0);
}       

这基本上就是你所需要的。

尝试使用我建议的方法解决,它会帮助你解决Euler的高级问题。

答案结束了。 :)