查找介于n1与n2(0到32768)之间所有满足下列条件的整数:
(1)该数的十进制表示中有且仅有两个相同的数字位;
(2)该数是素数。
// author:yangyang
//main.c
#include "stdafx.h"
#include "math.h"
#define A 0//定义左边界,可以修改
#define B 500//定义右边界
char string[20];//存放字符
char *pstring = string;//指向字符的指针
int same_panduan(long int a);//判断有相同的整数的素数
int main()
{
int number = 0;//存储每个数的因子的个数
int a[B] = { 0 };//5列的数组
int *pnumber = a;//数组首地址赋值给指针
int num_number = 0;//素数共多少个
for (int num = A; num <= B; num++)//挑选素数
{
number = 0;//素数个数
for (int i = 1; i <= num; i++)//循环找出所有的因子
{
int yushu = num / i;
if (yushu*i == num)//判断是否为因子
{
number++;
}
}
if (number == 2)//如果只有两个因子,就是素数,输出
{
*pnumber = num;//将素数赋给指针
pnumber++;//指针地址移位
num_number++;
}
}
printf("素数个数为%d\n", num_number);
pnumber = a;//指针地址初始化
for (int i = 1; i <= num_number; i++)//输出素数
{
printf("%d ", *pnumber++);
if (i % 5 == 0)printf("\n");
if (*pnumber == 0)
{
printf("\n");
break;
}
}
//输出只有两个相同数的素数
//printf("素数个数为%d\n", num_number);
pnumber = a;//指针地址初始化
printf("满足条件的素数为");
for (int i = 1; i <= num_number; i++)//输出素数
{
if (same_panduan(*pnumber)==1)
{
printf("%d ", *pnumber);
}
pnumber++;
}
return 0;
}
//将整数转化为字符存到字符数组中去,并判断是否有两个相等,有且只有两个相等,返回1
int same_panduan(long int a)
{
int num = 0;//存放位数
for (int i = 0;; i++)//判断整数有几个位数
{
long int tmp = a / pow(10, i);
if (tmp == 0)
{
num = i;
//printf("该整数有%d位\n", num);
break;
}
}
for (int i = 0; i < num; i++)//将整数一次输入到数组中
{
long int number = a / (int)(pow(10, i));//移位
int number_final = number % 10;//个位
*(string + num - i - 1) = number_final + 48;//转化为字符
}
int flag = 0;
int flag_same = 1;
int start = 1;
while (start <= 3)
{
for (int i = start; i < num; i++)//比较
{
if (*(string + flag) == *(string + i)) //有两个值相等
{
flag_same++;//相等的个数加一
}
}
start++; flag++;
}
if (flag_same == 2)//只有两个相等的数字
{
//start = 0;
return 1;//返回1
}
else {
//start = 0;
return 0;//返回0
}
}
结果如图,这个程序由前几篇题为(求100~200间的所有素数,每行打印5个素数)改编,程序可能有点乱