这一题我用的依然是以前的解法,现只求回文数,而且偶数回文数不需要求(如:312213)必定是11的倍数但是11要特殊处理,反正这一次我错了不少地方。
1,把变量名写错了,上面分明是给a赋值,下面却写成了对b进行操作。
LANG: C
ID: yylogoo2
PROG: pprime
/
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int a, b;
int isprime(int num)
{
int i, li;
if(num == 2 || num == 3 || num == 5 || num == 7 || num == 11 ||
num == 13){
return 1;
}
if(num % 2 == 0 || num % 3 == 0 || num % 5 == 0 || num % 7 == 0 ||
num % 11 == 0 || num % 13 == 0){
return 0;
}
li = sqrt(num);
for(i = 17; i <= li; i++){
if(num % i == 0){
return 0;
}
}
return 1;
}
void check(int num)
{
if(num > b){
exit(0);
}
if(num < a){
return ;
}
if(isprime(num)){
printf("%d\n", num);
}
}
char tmp[9];
int makenum(int num)
{
int i, j;
sprintf(tmp, "%d", num);
i = j = strlen(tmp);
/
Mistack 2:
i的初始值错误!
/
i -= 2;
/
Mistack 3:
范围错误了,, 应该是i >= 0, 不是i != 0
/
while(i >= 0){
tmp[j] = tmp[i];
i–, j++;
}
/
Mistack 4:
字符串没有以’\0’结尾
/
tmp[j] = ‘\0’;
sscanf(tmp, "%d", &num);
return num;
}
void srch(int i, int j)
{
int num;
while(i <= j){
num = makenum(i);
/
Mistack 1:
把下面的参数num写成了i, 所以导致错误!
/
check(num);
i++;
}
}
int main(void)
{
int i;
freopen("pprime.in", "r", stdin);
freopen("pprime.out", "w", stdout);
scanf("%d%d", &a, &b);
check(5);
check(7);
check(11);
/
Mistack 5:
应该是从10开始, 而不是100
/
srch(10, 9999);
return 0;
}