洛谷P1217
题目要求
1.判断是否为回文数
2.判断是否为质数
用函数写了一种解法,但是就是最后的数超出了int范围,因此在洛谷中没有AC掉
但是我先开一个坑,看看之后能不能优化一下代码,AC掉这道题
先在此记录一下这种写法,之后打算用数组再写一次
代码如下
#include <stdio.h>
#include <string.h>
#include <math.h>
//判断这个数是几位数
int jiwei(int x)
{
int y=1;//返回几位数//因为如果是个位数的话就为0
while (x / 10 != 0)
{
x = x / 10;
y++;
}
return y;
}
//判断是不是回文数
int huiwen(int i,int j)//i位数,要判断的数为j
{
int duoshao;//存刚开始有几位数
duoshao = i;
int arr = j;
if (duoshao == 1)
{
return 3;
}
if (duoshao % 2 == 1)
{
while (i > (duoshao+1) / 2)
{
int temp = pow(10, i - 1);
if (((j / temp)%10) == (arr % 10))
{
i--;
arr = arr / 10;
}
else
return 2;//表示不是回文数
}
return 3;//表示是回文数
}
else {
while(i>(duoshao/2))//是位数是偶数
{
int temp = pow(10, i - 1);
if (((j / temp)%10) == (arr % 10))
{
i--;
arr = arr / 10;
}
else
return 2;//表示不是回文数
}
return 3;//表示是回文数
}
}
//判断是不是质数
int zhishu(int u,int k)//有u位数,数是k
{
for (int i = 2; i <= k / 2; i++)
{
if (k % i == 0)return 1;//不是质数
else if(i==k/2)return 0;//表示是质数
}
}
int main()
{
int x,y;
int p=0;//表示几位数
int ox, oy;
scanf_s("%d%d", &x,&y);
for (int i = x; i <= y; i++)
{
p = jiwei(i);
ox = huiwen(p, i);
oy = zhishu(p, i);
//printf("huiwen=%d\n", ox);
//printf("zhishu=%d\n", oy);
if (huiwen(p, i) == 3)
{
if (zhishu(p, i) == 0) printf("%d\n", i);
}
}
}