任务是找到由两个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;
}
答案 0 :(得分:2)
您的条件不正确:
if(palindrome && max_palindrome < a){
应改为:
if(palindrome && max_palindrome < product){
如果您仅将数字转换为字符串,您的程序可能会简单得多(可能会稍慢一些,但您已经通过对数字进行两次循环而浪费了CPU时间)。