这是问题陈述。
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。
我已经读了很多遍,以某种方式无法找到错误。
附注:由于此处的数字太大,因此我将各个数字存储在数组中。
码
#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);
}
最佳答案
您是正确的,您的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的高级问题。
答案就出来了。 :)
关于c - 欧拉计划48号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8572418/