一段特别诡异的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的位置不同 结果不同
展开
 我来答
Yuqi_Tan

2018-01-10 · TA获得超过8.9万个赞
知道大有可为答主
回答量:9918
采纳率:93%
帮助的人:3485万
展开全部

你发的这段程序,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放的那两个位置不同 结果是不同的
追答
我运行过了,结果相同。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式