以下是问题陈述。
序列 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);
}
n^n
数字,只需它们的最后10位数字。你不需要全部数字来找出136...377 + 245...789
(每个一百万位数字)组成的值为...166
。 - ypercubeᵀᴹ