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