C 48号工程

C 48号工程,c,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由于这里的数字太大,所以我将单个数字存储在一个数组中。 代码 #

这是问题陈述

系列,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由于这里的数字太大,所以我将单个数字存储在一个数组中。 代码

#包括
int n[1001][3001]={};
整数和[3001]={};
整数上升到整数(整数q)
{
int i,j;
//整数位数;
整数进位=0;
int carry1=0;
n[q][0]=q;

对于(i=0;i您是正确的,您的
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);
}       
int sumof()
{
int i,j,进位=0,s=0;

对于(i=0;我知道这对你的代码没有帮助,但我会把它放在那里……使用
powmod
这会变成几行代码。再说一次,我没有破坏你的代码,这显示了我付出了巨大的努力:)天哪,我真不敢相信我没有想到这一点!谢谢:)顺便说一句,你能帮我一下吗,因为设计算法和编写代码花了一个小时。更新1:我的Sumof函数完全错了。正在处理它。更新2:我修改了Sumof()函数。基本上,每次我递增时,存储在sum[j]中的数字被一个新的求和替换。因此它没有显示循环求和,所以这里是chang3。对于(j=0;j1),您不需要一次取2,您可以一次求多个列,请参见我的答案。
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);
}