最大回文数(如果从左到右或从右到左阅读,则为相同的数字)

时间:2018-06-22 15:05:33

标签: c++ xcode

任务是找到由两个3位数字的乘积组成的最大回文数,但我不知道我在哪里弄错了。

我做了一个循环,得到了两个3位数字的所有可能乘积;然后将产品转换为数组,以便可以验证该回文数,最后如果它大于最后一个回文数,则将其保存到变量max_palindrome

这是代码:

#include <iostream>

int number_of_digits(int num){
    int digit = 0;
    while(num > 0){
        digit++;
        num /= 10;
    }
    return digit;
}

int main() {
    int max_palindrome = 0;
    for(int a = 100; a < 1000; a++){

        for(int b = 100; b < 1000; b++){

            int product = a * b;
            int digits = number_of_digits(product);

//          transform number in a vector
            int vector_product[digits];
            int temporary_num = product;
            for(int c = digits-1; c >= 0; c--){
                vector_product[c] = temporary_num % 10;
                temporary_num /= 10;
            }

//          verifying that the number is a palindrome
            int d = digits-1;
            bool palindrome = true;
            for(int e = 0; e < digits; e++){
                if(vector_product[e] != vector_product[d]){
                    palindrome = false;
                    break;
                }
                d--;
            }

            if(palindrome && max_palindrome < a){
                std::cout<<max_palindrome<<std::endl;
                max_palindrome = product;
            }
        }
    }

    std::cout<<"The biggest palindrome number from a product of two 3-        digits numbers is "<<max_palindrome<<std::endl;

    return 0;
}

1 个答案:

答案 0 :(得分:2)

您的条件不正确:

if(palindrome && max_palindrome < a){

应改为:

if(palindrome && max_palindrome < product){

如果您仅将数字转换为字符串,您的程序可能会简单得多(可能会稍慢一些,但您已经通过对数字进行两次循环而浪费了CPU时间)。