c語言自守數
① 判斷自守數並輸出(c語言)
#include <stdio.h>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(k>0){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);}
② C語言自守數問題
90625和109376兩個數的平方溢出了,變成了負數,當然會出錯
另:32位的vc、vs等許多編譯器中long和int的位數相同(即能表示的范圍相同),可以將上面的long改為long long或__int64
③ C語言判斷自守數
程序已經修改運行通過:
#include <stdio.h>
int main()
{
long a,b,i=1;
scanf("%ld",&a);
b=a;
do
{
b=b/10;
i*=10;
}while(b>0);
if(a*a%i==a)
printf("Yes ");
else
printf("No ");
return 0;
}
④ c語言自守數 #include <stdio.h> void main(){ int n,m,k=1; scanf("%d",&n); m=n; while(m){k*=10;m/=10;
實際就是按照輸入是幾位,然後取輸入數平方的位數,如果相等就是自守數
while(m){k*=10;m/=10;}
是為了計算輸入數n的位數。如輸入數為2位(例25),則k=100,然後利用100和輸入數的平方取余如果相等if (n*n%k==n)就是自守數。
例:輸入數為:25;則k=100
25*25%100=25
⑤ C語言關於自守數的字典序輸出
#include<stdio.h>
longRe0(longa);
intFact(inta);
main()
{
longarray[1000];
charstr[1000][1000];
chart[1000];
intm=0;
intk=0;
intj;
longp=0,chino,i,guess;
scanf("%ld",&chino);
for(i=1;i<=chino;i++)
{
guess=Re0(i);
if(guess==i)
{
array[k++]=i;
}
}
for(i=0;i<k;i++)
{
sprintf(str[i],"%d",array[i]);
}
for(i=0;i<k-1;i++)//將字元串排序
{
for(j=0;j<k-1-i;j++)
if(strcmp(str[j],str[j+1])>0)
{
strcpy(t,str[j]);
strcpy(str[j],str[j+1]);
strcpy(str[j+1],t);
}
}
for(i=0;i<k;i++)//輸出
{
if(i==k-1)
printf("%s",str[i]);
else
printf("%s",str[i]);
}
}
intFact(inta)
{
if(a==0||a==1)
return1;
elseif(a>1)
returna*Fact(a-1);
}
longRe0(longa) //計算各個位數之和
{
longsum;
intA,B,C,D,E; //分別為個位、十位、百位、千位、萬位
if(a<10)
returnFact(a);
elseif(a>=10&&a<100)
{
A=a%10;
B=a/10;
sum=Fact(A)+Fact(B);
returnsum;
}
elseif(a>=100&&a<1000)
{
A=a%10;
B=a%100/10;
C=a/100;
sum=Fact(A)+Fact(B)+Fact(C);
returnsum;
}
elseif(a>=1000&&a<10000)
{
A=a%10;
B=a%100/10;
C=a%1000/100;
D=a/1000;
sum=Fact(A)+Fact(B)+Fact(C)+Fact(D);
returnsum;
}
elseif(a>=10000&&a<100000)
{
A=a%10;
B=a%100/10;
C=a%1000/100;
D=a%10000/1000;
E=a/10000;
sum=Fact(A)+Fact(B)+Fact(C)+Fact(D)+Fact(E);
returnsum;
}
}
⑥ C語言 自守數。任意輸入一個自然數,判斷是否自守數並輸出
#include<stdio.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);
}
⑦ 用C語言編譯程序:求自守數
#include
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(m>n)
{
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;
}
⑧ 道C語言的題目 編程求100以內的所有的自守數,自守數是指一個數的平方
#include<stdio.h>
int main()
{int i,j;
for(i=1;i<100;i++)
{j=i*i;
if(i<10&&j%10==i)printf("%d ",i);
else if(j%100==i)printf("%d ",i);
}
return 0;
}
⑨ c語言自守數
主函數如下寫就可以了。但我看著你的自定義函數是錯誤的——
intmain(intargc,char*argv[]){
intn,t;
for(t=0,n=1;n<10000;n++)
if(isAutomorphic(n))
printf(++t%5?"%8d":"%8d ",n);
printf(" ");
return0;
}
⑩ 用c語言編譯程序:求自守數(有一定范圍)。注釋里標好了問題
上一步k值為log10(i)+1,即變數i十進製表示的位數
通過累乘,將m值賦值為為i的十進制最高位的表示,用於下面的a%=m
如i值為[100,999]區間,則m=100;i值為[10,99]區間,則m=10