第一阶段考核找出最大的回文数,并且是由两个三位数相乘
本帖最后由 坦然自若 于 2019-7-23 11:19 编辑#include <stdio.h>
int main()
{
int i, j, target, invert, num; //i是较大的那个三位数,j是较小的三位数
for (i = 999; i >= 100; i--)
{
for (j = 999; j >= 100; j--)
{
//求倒置数
target = i * j;
num = target;
invert = 0;
while (target)
{
invert = invert + target % 10;
target /= 10;
}
if (num == invert) //如果倒置数和原数一样用goto语句跳出循环
{
goto findit;
}
}
}
findit: printf("%d*%d=%d\n", i, j, num);
return 0;
}
不知道哪里错了,恳请哪位大神帮忙 本帖最后由 一木之禾 于 2019-7-23 11:44 编辑
我看来有两个问题,首先,invert你是想保存倒置的数,那样的话,每次加上target的末位数之前,应该先乘以10来达到移位。
其次,根据修改过上面这个问题之后的程序的结果来看,答案还是不对,原因是原数末尾可能是0,倒置之后再判断是否回文就显然不对了。至于怎么判断回文,你再思考思考。
另外,以后提问还是应该把代码放在代码框里,注意代码规范。
while(target){
invert = invert +target % 10;
invert = invert*10;
target /=10;
} 求哪位大神帮忙 {:5_92:} please~~ 感谢大神,又是您啊,非常感谢,对了大神怎么发代码呢 一木之禾 发表于 2019-7-23 11:17
我看来有两个问题,首先,invert你是想保存倒置的数,那样的话,每次加上target的末位数之前,应该先乘以10 ...
while(target){
invert = invert * 10;
invert = invert + target % 10;
target /=10;
}
大神我懂了,先乘10,可是这样也得不出正确结果 本帖最后由 坦然自若 于 2019-7-23 12:18 编辑
一木之禾 发表于 2019-7-23 11:17
我看来有两个问题,首先,invert你是想保存倒置的数,那样的话,每次加上target的末位数之前,应该先乘以10 ...
大神我终于懂了,原来我这种是两个三位数其中一个为最大(可能比正确结果还大),另一个不能保证为最大(可能比正确结果小),这样求出的回文数不一定为最大。只能先找回文数,在确定它是否是两个三位数相乘 坦然自若 发表于 2019-7-23 11:56
感谢大神,又是您啊,非常感谢,对了大神怎么发代码呢
编辑框那里有个和长得这个<>样子的符号,点一下,出来个弹框,代码直接粘进去就好了。
啊哈哈,我也就能解决点基本点的c的问题了,C也没学太深,计科专业学生党 一木之禾 发表于 2019-7-23 14:34
编辑框那里有个和长得这个样子的符号,点一下,出来个弹框,代码直接粘进去就好了。
啊哈哈,我也就能解 ...
ok,谢谢大神{:10_256:}
页:
[1]