为什么结果总会有一个很大的负数?

2025-12-14 00:33:34
推荐回答(3个)
回答1:

/*数组越界*/

#include
#include
#include

int main(void)
{
int a,b = 0;
int c=10;
int str[80];
int i=0;

for(a = 2;a <= 1000 && b < 65535; a++)
{ b = a * a;
c = 10;
while( a/c != 0)
c=c*10;

if( (b-a) % c == 0)
{
str[i] = a;
i++;
}
}
i--;/*若少此句,则越界,所以出现负数,况且这个数是不定的,不同编译器不同值*/

printf("守形数有:\n");

for(; i >= 0 ;i--)
printf("%5d ",str[i]);

getch();

return 0;
}

回答2:

#include
#include
#include

int main(void)
{
int a,b;
int c=10;
int str[80];
int i=0;
for(a=2;a<=1000;a++)
{ b=a*a;
c=10;
while(a/c!=0)
c=c*10;
if((b-a)%c==0)
{ str[i]=a;
i++;
}
}
i--;//前边的最后一次i++后数组里没有放任何东西所以要减1
printf("守形数有:\n");
for(;i>=0;i--)
printf("%d、",str[i]);
getch();

}

回答3:

for(a=2;a<=1000;a++)
{ b=a*a

这里的b早就越界了,是int型