#include<stdio.h>
int main(void)
{
int rev=0,temp=0,frwd,n,ans=0;
int i,j;
for(i=100;i<=999;i++)
{
for(j=i;j<=999;j++)
{
n = i*j;
frwd = n;
while(n!=0)
{
temp = n%10;
n = n/10;
rev = temp+rev*10;
}
printf("%d",rev);
if((rev == frwd)&&(ans<frwd))
{
ans=frwd;
printf("%d",ans);
}
}
}
return(0);
}
我已尝试解决所有问题,但此代码似乎没有提供正确的输出。 所需的输出是6位数的最大回文数。 如果我正在运行单个部件,即数字的反转,检查数字是否是回文或for循环,它们工作正常,但在程序中它们将垃圾作为输出。 任何帮助,将不胜感激。
答案 0 :(得分:2)
你的问题是你没有像cowanother.anon.ard所说的那样将rev重新初始化为0。尝试将rev = 0置于内部for循环中。
但是你不能通过你的方法获得999999作为6位数的最高回文数,因为你没有检查所有的6位数字。
答案 1 :(得分:2)
#include<stdio.h>
int main(void)
{
int rev=0,temp=0,frwd,n,ans=0;
int i,j;
for(i=100000;i<=999999;i++)
{
frwd = n = i;
rev = 0;
while(n!=0)
{
temp = n%10;
n = n/10;
rev = temp+rev*10;
}
if((rev == frwd)&&(ans<frwd))
{
ans=frwd;
}
}
printf("%d\n",ans);
return(0);
}
答案 2 :(得分:1)
您的代码有4个问题: -
像another.anon.coward所说 - 你需要把rev=0
放在内圈
您需要将每个打印的数字分隔为空格或换行符('\ n')
printf("\n %d");
。否则他们看起来像一个大号(垃圾)。
你的算法也错了。根据您的程序,最大的6位数字是906609(正确的答案是999999)。为此,您应将内部循环更改为j=0;j<999;j++
并将n=i*j
更改为n=i*1000+j
。
同时将printf("\n%d",ans);
移出循环。
更正后的计划是:
#include <stdio.h>
int main(void)
{
int rev=0,temp=0,frwd,n,ans=0;
int i,j;
for(i=100;i<=999;i++)
{
for(j=0;j<=999;j++) /*CORRECTED THIS LINE,*/
{ rev=0;/*ADDED THIS LINE;*/
n = (i*1000) + j; /*CORRECTED THIS LINE*/
frwd = n;
while(n!=0)
{
temp = n%10;
n = n/10;
rev = temp+rev*10;
}
printf("\n%d",rev); /*THIS LINE,*/
if((rev == frwd)&&(ans<frwd))
{
ans=frwd;
}
}
}
printf("\n%d",ans); /* AND THIS LINE*/
return(0);
}
答案 3 :(得分:0)
#include <stdio.h>
int main(void)
{
int rev=0,temp=0,frwd,n,ans=0;
int i,j;
for(i=100;i<=999;i++)
{
for(j=0;j<=999;j++) /*CORRECTED THIS LINE,*/
{ rev=0;/*ADDED THIS LINE;*/
n = (i*1000) + j; /*CORRECTED THIS LINE*/
frwd = n;
while(n!=0)
{
temp = n%10;
n = n/10;
rev = temp+rev*10;
}
printf("\n%d",rev); /*THIS LINE,*/
if((rev == frwd)&&(ans<frwd))
{
ans=frwd;
}
}
}
printf("\n%d",ans); /* AND THIS LINE*/
return(0);
}