我正在尝试使C程序找到小于n的友好数字。
Amicable数字是两个不同的数字,因此每个数字的正确除数之和等于另一个数。
友好数字(220,284)的例子;对于220的适当除数是1,2,4,5,10,11,20,22,44,55和110,其中和为284; 284的适当除数分别为1,2,4,71和142,其中总和为220.
到现在为止,我已计算出每个数字的除数之和,并将它们放入数组中;
s [0] = 0,s [1] = 1; s [2] = 1 + 2 = 3,s [3] = 1 + 3 = 4,依此类推。
但我的程序崩溃,调试器中没有任何内容。一切都打印得很好,但毕竟返回-1073741819并且程序崩溃了。
#include <stdio.h>
#include <stdlib.h>
int sumofdivizor(int nr)
{
//nr=number,s=sum of the divisors of nr
int i,s=0;
for(i=1;i<=nr;i++)
{
if(nr%i==0)
{
s=s+i;
}
else continue;
}
return s;
}
int main()
{
int *s,n,i;
s =(int*)malloc(n*sizeof(int));
s[0]=0;
printf("Print a limit number\n");
scanf("%d",&n);
for(i=1;i<n;i++)
{
*(s+i)=sumofdivizor(i);
}
for(i=0;i<n;i++)
printf("s[%d]=%d\n",i,s[i]);
return 0;
}
答案 0 :(得分:7)
int *s,n,i;
s =(int*)malloc(n*sizeof(int));
您正在使用n
的值来决定分配多少空间。但您尚未为n
分配任何值。