最大的两个3位数的回文产品

时间:2015-06-28 18:36:06

标签: c pointers printf iteration

它可能已经发布在某个地方,因为它是一个项目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和最大的东西都不是必需的,我只是测试了很多改变所有类型的东西,使用指针和什么不是,所以不需要太多关注那部分代码。

4 个答案:

答案 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')

修正警告,不要只是试图隐藏它们。

然后发布更正的代码,如果它仍然显示问题