主函數(shù)如下寫就可以了。但我看著你的自定義函數(shù)是錯(cuò)誤的——
創(chuàng)新互聯(lián)主要從事網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)扶余,10年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):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十進(jìn)制表示的位數(shù)
通過累乘,將m值賦值為為i的十進(jìn)制最高位的表示,用于下面的a%=m
如i值為[100,999]區(qū)間,則m=100;i值為[10,99]區(qū)間,則m=10
90625和109376兩個(gè)數(shù)的平方溢出了,變成了負(fù)數(shù),當(dāng)然會(huì)出錯(cuò)
另:32位的vc、vs等許多編譯器中l(wèi)ong和int的位數(shù)相同(即能表示的范圍相同),可以將上面的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("輸入錯(cuò)誤,請(qǐng)重新輸入:\n");
else
break;
}
if(mn)
{
m-=n;
n+=m;
m=n-m;
}
printf("%d到%d之間的自守?cái)?shù)有:\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的位數(shù)確定截取數(shù)字進(jìn)行乘法時(shí)的系數(shù)k*/kk=k*10; /*kk為截取部分積時(shí)的系數(shù)*/mul=0; /*積的最后n位*/ll=10; /*ll為截取乘數(shù)相應(yīng)位時(shí)的系數(shù)*/while(k0){mul=(mul+(number%(k*10))*(number%ll-number%(ll/10)))%kk;/*(部分積+截取被乘數(shù)的后N位*截取乘數(shù)的第M位),%kk再截取部分積*/k/=10; /*k為截取被乘數(shù)時(shí)的系數(shù)*/ll*=10;}if(number==mul) /*判斷若為自守?cái)?shù)則輸出*/printf("%ld 是自守?cái)?shù)",number);elseprintf("%ld 不是自守?cái)?shù)",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);
}