Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
最大回文乘积(欧拉项目)——C++; 我试图用C++解决Euler的工程问题。_C++ - Fatal编程技术网

最大回文乘积(欧拉项目)——C++; 我试图用C++解决Euler的工程问题。

最大回文乘积(欧拉项目)——C++; 我试图用C++解决Euler的工程问题。,c++,C++,回文数字的两种读取方式相同。由两个两位数的乘积构成的最大回文是9009=91×99。 查找由两个3位数字的乘积构成的最大回文 这是我的C++代码: #include <iostream> using namespace std; bool isPalindrome(int num1){ int num2, digit, rev = 0; num1 = 0; num2 = num1; do { digit = num1

回文数字的两种读取方式相同。由两个两位数的乘积构成的最大回文是9009=91×99。 查找由两个3位数字的乘积构成的最大回文

这是我的C++代码:

#include <iostream>
using namespace std;

bool isPalindrome(int num1){
    int num2, digit, rev = 0;
    num1 = 0;

     num2 = num1;
     do
     {
        digit = num1 % 10;
        rev = (rev * 10) + digit;
        num1 = num1 / 10;
     } while (num1 != 0);

     if (num2 == rev){
         return true;
     }
     else{
         return false;
     }
};

int main(){

    int product = 1321;
    int num1 = 999;
    int num2 = 999;
    while(isPalindrome(product)!=1){
        product= num1*num2;
        if(isPalindrome(product)==1){
            cout<< product;
            break;
        }
    num1--;
    };
};
#包括
使用名称空间std;
布尔伊斯帕林德罗姆(国际num1){
整数num2,数字,版本=0;
num1=0;
num2=num1;
做
{
数字=num1%10;
版次=(版次*10)+位数;
num1=num1/10;
}而(num1!=0);
如果(num2==rev){
返回true;
}
否则{
返回false;
}
};
int main(){
int乘积=1321;
int num1=999;
int num2=999;
而(isPalindrome(产品)!=1){
乘积=num1*num2;
如果(isPalindrome(产品)==1){

您似乎只是在检查由减少的
num1
和不断设置为-999
num2
形成的数字

我怀疑您没有看到任何输出,因为没有任何数字
999n,0
是回文的

我可能错了,但无论如何,您都需要检查
num2
的其他值

类似这样的东西(伪代码)将是一个良好的开端:

bigPalin = -1
for n1 in 100..999: # Three-digits means 100 thru 999.
    for n2 in 100..999:
        prod = n1 * n2
        if prod > bigPalin:
            if isPalindrome(prod):
                bigPalin = prod
if bigPamin != -1:
    print bigPalin
顺便说一句,首先检查大于当前最大回文的数字,因为单次乘法几乎肯定比回文检查更便宜


作为补充(我建议您在自己尝试之前不要使用它),这是我提出的C代码:

#include <stdio.h>

static int isPalin(int num) {
    // Use temporary to create reversed value.

    int test = num, rev = 0;
    while (test > 0) {
        rev = rev * 10 + (test % 10);
        test /= 10;
    }

    // Return check that original and reversed are same.

    return rev == num;
}

int main() {
    // Largest palindrome and factors that made it.

    int bigPalin = -1, big1 = 0, big2 = 0;

    // Loop through values for n1.

    for (int n1 = 100; n1 < 1000; ++n1) {
        // Addition probably faster than multiplication, so use that,
        // adding n1 each time rather than working out n1 * n2.
        // Also we baseline at 99*n1 so first is 100*n1.

        int prod = 99 * n1;
        for (int n2 = 100; n2 < 1000; ++n2) {
            prod += n1;

            // Don't check for palindrome if product is not greater,
            // this works because C shortcuts logical AND.

            if (prod > bigPalin && isPalin(prod)) {
                // A bigger palindrome? Store details.

                big1 = n1;
                big2 = n2;
                bigPalin = prod;
            }
        }
    }

    // Print out final details.

    printf("%d x %d = %d\n", big1, big2, bigPalin);
    return 0;
}

我明白你的意思。我会尽量减少num2,看看这是否有效。
pax@paxBox1> time ./myTestProg
913 x 993 = 906609

real    0m0.038s
user    0m0.016s
sys     0m0.000s