查找介于n1与n2(0<n1<n2<32768)之间所有满足下列条件的整数: (1)该数的十进制表示中有且仅有两个相同的数字位; (2)该数是素数。

查找介于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个素数)改编,程序可能有点乱
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值