这是问题陈述。
该系列,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);
}
答案 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的高级问题。
答案结束了。 :)