两个三位数的最大回文积
Largest palindrome product of two 3 digit numbers
它可能已经发布在某个地方,因为它是一个项目 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 和 largest 之类的东西不是必需的,我只是测试了很多改变所有类型的东西,使用指针等等,所以不需要太注意那部分代码。
首先你在语句中将一个int类型赋值给一个int *类型
*largest=a;
使其*最大=&a;
此外,打印时在最大之前使用 * 运算符
stop: printf("%d\n", *largest);
终于把你的逻辑加起来了,你检查一下:
999X999 , 999X998 , 999X997 等等......
但是 999*997 小于 998*998,因此您的代码可能会导致回文数低于可能值。
正如 rakeb 所提到的,您应该使用:
*最大 = &a
除此之外,您没有得到正确答案的原因是您的 if 语句永远不会为真,因此 'a' 将始终保持为 0。
您的代码在 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;
}
posted 代码无法完全编译。
建议在编译时始终启用所有警告
(对于 gcc,至少使用“-Wall -Wextra -pedantic”)
修复警告,不要只是试图隐藏它们。
然后post更正的代码,如果仍然显示问题
它可能已经发布在某个地方,因为它是一个项目 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 和 largest 之类的东西不是必需的,我只是测试了很多改变所有类型的东西,使用指针等等,所以不需要太注意那部分代码。
首先你在语句中将一个int类型赋值给一个int *类型
*largest=a;
使其*最大=&a;
此外,打印时在最大之前使用 * 运算符
stop: printf("%d\n", *largest);
终于把你的逻辑加起来了,你检查一下:
999X999 , 999X998 , 999X997 等等......
但是 999*997 小于 998*998,因此您的代码可能会导致回文数低于可能值。
正如 rakeb 所提到的,您应该使用: *最大 = &a
除此之外,您没有得到正确答案的原因是您的 if 语句永远不会为真,因此 'a' 将始终保持为 0。
您的代码在 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;
}
posted 代码无法完全编译。
建议在编译时始终启用所有警告
(对于 gcc,至少使用“-Wall -Wextra -pedantic”)
修复警告,不要只是试图隐藏它们。
然后post更正的代码,如果仍然显示问题