主函数如下写就可以了。但我看着你的自定义函数是错误的——
创新互联主要从事网站设计、成都网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务扶余,10年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220
int main(int argc,char *argv[]){
int n,t;
for(t=0,n=1;n10000;n++)
if(isAutomorphic(n))
printf(++t%5 ? "%8d" : "%8d\n",n);
printf("\n");
return 0;
}
上一步k值为log10(i)+1,即变量i十进制表示的位数
通过累乘,将m值赋值为为i的十进制最高位的表示,用于下面的a%=m
如i值为[100,999]区间,则m=100;i值为[10,99]区间,则m=10
90625和109376两个数的平方溢出了,变成了负数,当然会出错
另:32位的vc、vs等许多编译器中long和int的位数相同(即能表示的范围相同),可以将上面的long改为long long或__int64
#include stdio.h
int main()
{
int m,n;
printf("输入m,n:");
while(1)
{
scanf("%d %d",m,n);
if(m=10||m=200000 || n=10||n=200000)
printf("输入错误,请重新输入:\n");
else
break;
}
if(mn)
{
m-=n;
n+=m;
m=n-m;
}
printf("%d到%d之间的自守数有:\n",m,n);
int i;
int temp;
int count=0;
while(m=n)
{
temp = m*(m-1);
i=1;
while(i=m)
i*=10;
if(temp%i==0)
{
count++;
printf("%7d",m);
if(count%5==0)
printf("\n");
}
m++;
}
printf("\n");
return 0;
}
#include int main(){
long mul,number,k,ll,kk;scanf("%ld",number);for(mul=number,k=1;(mul/=10)0;k*=10);/*由number的位数确定截取数字进行乘法时的系数k*/kk=k*10; /*kk为截取部分积时的系数*/mul=0; /*积的最后n位*/ll=10; /*ll为截取乘数相应位时的系数*/while(k0){mul=(mul+(number%(k*10))*(number%ll-number%(ll/10)))%kk;/*(部分积+截取被乘数的后N位*截取乘数的第M位),%kk再截取部分积*/k/=10; /*k为截取被乘数时的系数*/ll*=10;}if(number==mul) /*判断若为自守数则输出*/printf("%ld 是自守数",number);elseprintf("%ld 不是自守数",number);}
#includestdio.h
void main()
{
int x,y,z;
scanf("%d",x);
y=x*x;
z=y-x;
if (z%10==0)
printf("%d yes %d",x,y);
else
printf("%d no %d",x,y);
}