:找出1到99之间的全部同构数并这些同构数之和。同构数是这样一组数,它出现在平方数的右边。例如5是25右边的数,25是是625右边的数,5和25都是同构数。程序中有三处错误代码,请指出并改正之.
注意:不得改变程序结构。
程序如下:
#include<stdio.h>
main()
{
int i,s;
s=i;
for(i=1;i<100;i++)
if(i*i%10==i&&i*i%100==i)
{
s=i;
printf("%3d\n",i);
}
printf("Sum is %d",s);
}
#include<stdio.h>
main()
{
int i,s;
s=0;
for(i=1;i<100;i++)
if(i*i%10==i||i*i%100==i)
{
s+=i;
printf("%3d\n",i);
}
printf("Sum is %d",s);
}
运行截图:
#include<stdio.h>
main()
{
int i;
int s=0;
for(i=2;i<100;i++)
if(i*i%10==i||i*i%100==i)
{
s=s+i;
//printf("%3d\n",i);
printf("%d是%d的同构数!\n",i,i*i);
}
printf("Sum is %d\n",s);
return 0;
}
1、在使用变量s前,请确保s已经做了初始化,否则s的值不确定
2、if中的判断有问题,不是用%求余,至少也应该形如:if( i*i-(i*i/10)*10==i || i*i-(i*i/100)*10==i)
3、看程序s是表示和,应该写作s+=i,而不是s=i
i*i%10==i&&i*i%100==i //这个判断是错误的,一位数应该对10取模,而2位数才应该对100取模。
s=i; //for中的s=i也是错误的,s表示i的累加值,应该改成s = s + i ;而在循环之前设 s = 0 ;
第5行 s=0;
第7行 if(i*i%10==i||i*i%100==i)
第9行 s+=i;