它可能已经发布在某个地方,因为它是一个项目Euler问题,但是,我没有解决特定问题的问题,虽然我确实遇到了我写的代码问题,因为我似乎无法找到错误。
我的猜测是我在印刷或记忆价值时监督某些事情,但我不确定。无论如何,这是我的代码:
#include <stdio.h>
#include <stdlib.h>
int main(){
int x = 999, y = 999, z = 0, w = 0, a=0, *largest = a;
for (x; x > 99; x--){
for (y; y > 99; y--){
z = x*y;
while (z != 0){
w = w * 10;
w = w + z % 10;
z = z/10;
}
if (x*y == w){
a = w;
goto stop;
}
w = 0;
}
}
stop: printf("%d\n", largest);
system("pause");
return 0;
}
我知道a和最大的东西都不是必需的,我只是测试了很多改变所有类型的东西,使用指针和什么不是,所以不需要太多关注那部分代码。
答案 0 :(得分:1)
如rakeb所述,你应该使用: *最大=&amp; a
除此之外,你没有得到正确答案的原因是你的if语句永远不会是真的所以'a'总是保持为0。
答案 1 :(得分:1)
您的代码在a
中分配了最大的产品值,但您正在打印largest
这是一个指针。您的程序根本不需要指针largest
。
您的代码也不起作用,因为您
y
重置为999
。通过以上两个修复,它看起来像:
#include <stdio.h>
#include <stdlib.h>
int main(void){
int x = 999, y = 999, z = 0, w = 0, a=0;
for (x; x > 99; x--){
for (y=999; y > 99; y--){
z = x*y;
while (z != 0){
w = w * 10;
w = w + z % 10;
z = z/10;
}
if (x*y == w && a<x*y){
a = w;
}
w = 0;
}
}
printf("%d\n", a);
return 0;
}
答案 2 :(得分:0)
首先,您要在语句
中为int *类型分配int类型 *largest=a;
使*最大=&amp; a;
此外,打印时使用最大的*运算符
stop: printf("%d\n", *largest);
最后,当您检查时,添加逻辑可能有问题:
999X999,999X998,999X997等........
然而999 * 997小于998 * 998,因此您的代码可能会导致较低的pallindrome数量。
答案 3 :(得分:0)
发布的代码无法完全编译。
建议在编译时始终启用所有警告
(对于gcc,至少要使用'-Wall -Wextra -pedantic')
修正警告,不要只是试图隐藏它们。
然后发布更正的代码,如果它仍然显示问题