C语言,查找1-10^n有多少回文数,回文数满足,1,只有1~9。2,每一位从小到大排列。3,回文
解决时间 2021-03-12 11:05
- 提问者网友:那叫心脏的地方装的都是你
- 2021-03-11 21:28
#include
#include
#include
int main()
{
int hui(int x);
int t,n,i,num,m;
while(scanf("%d",&t)!=EOF)
{
while(t--)
{
scanf("%d",&m);
num=0;
n=1;
for(i=0;i n*=10;
for(i=1;i if(hui(i)==1)
num++;
printf("%d\n",num);
}
}
return 0;
}
int hui(int x)
{
char str[1000];
int i,l,flag=0,flag1=0;
itoa(x,str,10); //转化为字符串
l=strlen(str);
for(i=0;i {
if(str[i]>'0'&&str[i]<='9') //1~9,没有0
flag=1;
else
return 0;
}
if(flag==1)
{
for(i=0;i if(str[i]!=str[l-i-1]) //回文
return 0;
flag1=1;
}
if(flag1==1)
{
if(l==1)
return 1;
else
{
if(l%2==0)
{
for(i=0;i<(l/2);i++) //从小到大
if(str[i]>=str[i+1])
return 0;
return 1;
}
else
{
for(i=0;i<=(l/2);i++)
if(str[i]>=str[i+1])
return 0;
return 1;
}
}
}
}
最佳答案
- 五星知识达人网友:掌灯师
- 2021-03-11 22:58
这样修改后试一下?
#include
#include
#include
int main()
{
int hui(long x);
long t,n,i,num,m;
while(scanf("%ld",&t)!=EOF)
{
while(t--)
{
scanf("%ld",&m);
num=0;
n=1;
for(i=0;i
n*=10;
for(i=1;i
if(hui(i)==1)
{num++; printf("%8ld",i);}
printf("\n%ld\n",num);
}
}
return 0;
}
int hui(long x)
{
char str[1000];
long i,l,flag=0,flag1=0;
ltoa(x,str,10);
l=strlen(str);
for(i=0;i
if(str[i]=='0')return 0;
if(l==1)return 1;
for(i=0;i
if(str[i]!=str[l-i-1])return 0;
if(l%2&&str[l/2-1]>=str[l/2])return 0;
for(i=0;i<(l/2);i++)
if(str[i]>=str[i+1])return 0; //11、22、1221如算回文的话,这里的=就要去掉
return 1;
}
我要举报
大家都在看
推荐资讯