一段特别诡异的C语言代码 求大神告知
#include<stdio.h>#include<stdlib.h>#defineA(X)((t[X]-'0'))intmain(){intflag=0;//intss...
#include <stdio.h>
#include <stdlib.h>
#define A(X) ((t[X]-'0'))
int main()
{
int flag=0;
// int ss=0;
int i,j;
char t[3];
int N,m;
// int flag=0;
scanf("%d",&m);
for(j=1;j<=m;j++)
{
scanf("%d",&N);
printf("Case %d:\n",j);
for(i=100;i<1000;i++)
{
// itoa(i,t,10);
sprintf(t,"%d",i);
if((A(0)+A(1))*2+A(2)==N)
{
printf("%c%c%c%c%c\n",t[0],t[1],t[2],t[1],t[0]);
flag++;
}
}
for(i=100;i<1000;i++)
{
// itoa(i,t,10);
sprintf(t,"%d",i);
if((A(0)+A(1)+A(2))*2==N)
{
printf("%c%c%c%c%c%c\n",t[0],t[1],t[2],t[2],t[1],t[0]);
flag++;
}
}
if(flag==0)
{
printf("-1\n");
}
}
}
这是求回文数的代码 intflag的位置不同 计算结果也就不用 假如flag定义在我注释的位置,结果就会变
这是一段求回文数字的代码 重点是 int flag的位置不同 结果不同 展开
#include <stdlib.h>
#define A(X) ((t[X]-'0'))
int main()
{
int flag=0;
// int ss=0;
int i,j;
char t[3];
int N,m;
// int flag=0;
scanf("%d",&m);
for(j=1;j<=m;j++)
{
scanf("%d",&N);
printf("Case %d:\n",j);
for(i=100;i<1000;i++)
{
// itoa(i,t,10);
sprintf(t,"%d",i);
if((A(0)+A(1))*2+A(2)==N)
{
printf("%c%c%c%c%c\n",t[0],t[1],t[2],t[1],t[0]);
flag++;
}
}
for(i=100;i<1000;i++)
{
// itoa(i,t,10);
sprintf(t,"%d",i);
if((A(0)+A(1)+A(2))*2==N)
{
printf("%c%c%c%c%c%c\n",t[0],t[1],t[2],t[2],t[1],t[0]);
flag++;
}
}
if(flag==0)
{
printf("-1\n");
}
}
}
这是求回文数的代码 intflag的位置不同 计算结果也就不用 假如flag定义在我注释的位置,结果就会变
这是一段求回文数字的代码 重点是 int flag的位置不同 结果不同 展开
展开全部
你发的这段程序,int flag放到你标记的两个位置都是一样的。但是我觉得应该放到下面的这个位置更合理:
#define A(X) ((t[X]-'0'))
int main()
{
int i,j,N,m;
char t[3];
// int flag=0;
scanf("%d",&m);
for(j=1;j<=m;j++)
{
int flag=0;//应该放到这里来!!!!
scanf("%d",&N);
printf("Case %d:\n",j);
for(i=100;i<1000;i++)
{
sprintf(t,"%d",i);
if((A(0)+A(1))*2+A(2)==N)
{
printf("%c%c%c%c%c\n",t[0],t[1],t[2],t[1],t[0]);
flag++;
}
}
for(i=100;i<1000;i++)
{
sprintf(t,"%d",i);
if((A(0)+A(1)+A(2))*2==N)
{
printf("%c%c%c%c%c%c\n",t[0],t[1],t[2],t[2],t[1],t[0]);
flag++;
}
}
if(flag==0)printf("-1\n");
}
}
还可以优化为以下程序:
#define A(X) ((t[X]-'0'))
int main()
{
int i,j,N,m,flag;
char t[3];
scanf("%d",&m);
for(j=1;j<=m;j++)
{
printf("Case %d:\n",j);
flag=0;
scanf("%d",&N);
for(i=100;i<1000;i++)
{
sprintf(t,"%d",i);
if((A(0)+A(1))*2+A(2)==N||(A(0)+A(1)+A(2))*2==N)
{
printf("%c%c%c",t[0],t[1],t[2]);
if((A(0)+A(1)+A(2))*2==N)printf("%c",t[2]);
printf("%c%c\n",t[1],t[0]);
flag++;
}
}
if(flag==0)printf("-1\n");
}
}
追问
大佬 你运行一下 flag放的那两个位置不同 结果是不同的
追答
我运行过了,结果相同。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询