练习1101

来源:互联网 发布:itc网络广播厂家电话 编辑:程序博客网 时间:2024/06/04 05:23
//查找介于n1与n2之间( 0<n1<n2<32768 )之间所有满足下列条件的整数
//1,该数的十进制表示中有且仅有相同的两个数
//2,该数为素数
//现判断条件1,然后在条件1的函数中判断条件2


#include <stdio.h>




void compare (int x , int y );//该函数判断是否有两个相同的数
void prime ( int m );//用于判断是否素数
int main()
{
int n1 = 0;
int n2 = 0;


printf(" please input n1 and n2 (0<n1<n2<32768) :\n");
scanf("%d%d",&n1,&n2);
    
printf("the result is :\n");
compare(  n1 , n2);
    return 0;
}
void compare ( int x , int y )
{
int temp = 0;
int count = 0;
int j;
int a[5];
int temp2 = 0;
int i = 0;
int k = 0;//k为从n1开始到n2间的值,temp用于保留k的值,count用于计数(若含有2位相同的数则加1)


for( k = x ; k <= y ; k++)
{
temp = k;
temp2 = k;
/*该循环用于将整型数放入数组中,方便各元素的比较*/
/*for ( i = 0 ; i < 5 ; i++)
{
k = k % 10;
a[i] = k;
k = temp / 10;
temp/=10;
            if( temp < 10 )
{
a[++i] = k;printf("**");//此处死循环
break;
}
}*/
while ( temp != 0 )
{
a[i] = temp % 10;
temp/=10;
i++;
}
/*该循环用于将各元素进行比较,若有相同则count加1
,根据要求,当count=1时满足条件,将a进行素数判断*/
for(i-=1 ; i > 0 ; i-- )
{
for ( j = i - 1 ; j >= 0 ; j--)
{
if ( a[i] ==  a[j] )
{
count++;
}
}
}
if ( count == 1 )
{
prime(temp2);//将当前的整型数temp2进行素数判断,如果temp为素数,则输出
}
count = 0;
}
}


void prime( int m )
{
int c;//用于循环变量


for ( c = 2 ; c < m  ; c++ )
{
if ( m %c == 0 )
{
break;
}
}
if( m == c )
{
printf("%d",m);//m即为所求
}
printf("\n");
}

0 0