#include
#include
int sushu(long x){
long i;
for(i=2;i
if(x%i==0){
return 0;}
}
return 1;
}
int decend(long n1,long n2,long x[]){
long i;
int a,k=0;
for(i=n1;i<=n2;i++)
{
int b[4],n=0;
while(i!=0)
{
a=i%10;
b[n]=a;
n++;
i=i/10;
}
if(n!=4){
continue;
}
if(b[3]>=b[2]&&b[2]>=b[1]&&b[1]>=b[0]&&sushu(i)){
x[k]=i;
k++;
}
}
return k;
}
int main(){
int m=0,i=0;
long a,b,c[100];
scanf("a=%ld b=%ld",&a,&b);
m=decend(a,b,c);
for(i=0;i
printf("%10ld",c[i]);
}
FILE *fp;
fp=fopen("myf2.out","w");
for(i=0;i
fprintf(fp,"%10ld",c[i]);
}
fprintf(fp,"my examination number is 00123456789\n");
fclose(fp);
return 0;
}
应该是将区间a和b之间的数的每一个位提取到数组时,将循环变量i改变了的原因,因为while循环后每次i都变为了0,虽然for循环里i++变为了1,然后进入for循环又变为了0,所以导致不能再判断其他数,导致卡在循环里了。用一个临时变量来代替i做取每一位数的操作即可。修改如下:
#include<stdio.h>
#include<stdlib.h>
int sushu(long x){
long i;
for(i=2;i<x/2;i++){
if(x%i==0){
return 0;
}
}
return 1;
}
int decend(long n1,long n2,long x[]){
long i;
int a,k=0;
for(i=n1;i<=n2;i++)
{
int b[4],n=0;
int temp = i;
while(temp!=0)
{
a=temp%10;
b[n]=a;
n++;
temp=temp/10;
}
// if(n!=4){
// continue;
// }
if(b[3]>=b[2]&&b[2]>=b[1]&&b[1]>=b[0]&&sushu(i)){
x[k]=i;
printf("x[%d]=%d\n",k,x[k]);
k++;
}
}
return k;
}
int main(){
int m=0,i=0;
long a,b,c[100];
scanf("a=%ld b=%ld",&a,&b);
printf("a=%ld b=%ld\n",a,b);
m=decend(a,b,c);
for(i=0;i<m;i++){
printf("%10ld",c[i]);
}
FILE *fp;
fp=fopen("myf2.out","w");
for(i=0;i<m;i++){
fprintf(fp,"%10ld",c[i]);
}
fprintf(fp,"my examination number is 00123456789\n");
fclose(fp);
return 0;
}
第49行scanf(a=%d)这样写会报错。
1、scanf函数的使用有问题,改为
scanf("%ld %ld",&a,&b);
2、decend函数没写好,还有在 for 循环里别轻易改变循环变量i的值
3、遇到问题,加点打印就可以看到了,学会自己解决问题