问既是回文数又是质数,且在10000-99999之间的整数有多
少个,并按从小到大的顺序输出其中最小的10个.
供参考:
#include <stdio.h>
int isPrime(int n)
{
int i;
if (n <= 3) return n > 1;
for (i = 2;i * i <= n; i++)
if (n % i == 0) return 0;
return 1;
}
int isPalindrome(int n)
{
int tmp = 0,k = n;
while (k){
tmp = tmp * 10 + k % 10;
k /= 10;
}
return tmp == n;
}
int main()
{
int i,cnt;
for (i = 10000, cnt = 0; i <= 99999; i++)
if (isPrime(i) && isPalindrome(i)){
if (cnt++ < 10)
printf("%6d",i);
}
printf("\n10000到99999之间既是回文数又是质数的数有%d个.\n",cnt);
return 0;
}
一个实现,供参考:
#include <stdio.h>
#include <math.h>
int main(void){
int prime=1,i,j;
int num=0;
int fivePosition,fourPosition,threePosition,twoPosition,onePosition;
for(i=10000;i<=99999;i++){
for(j=2;j<=sqrt(i);j++){ //判断当前的数是否为质数
if(i%j==0){
prime=0;
}
}
onePosition=i%10; //提取个位
twoPosition = i/10%10; //提取十位
//threePosition =i/100%10; //提取百位
fourPosition = i/1000%10; //提取千位
fivePosition = i/10000%10; //提取万位
if(onePosition==fivePosition&&twoPosition==fourPosition //如果既是回文数又是质数,则打印前10个
&&prime==1){
if(num<10){ //打印前10个
printf("%d ",i);
}
num++;
}
prime=1; //质数标志置为1,即默认当前数是质数
}
printf("\n10000到99999之间既是回文数又是质数的数有%d个。\n",num);
return 0;
}