查找两个3位数字的乘积的数字(Project Euler#4)

时间:2017-10-22 12:53:48

标签: c++ algorithm

原始问题是这样的,我们必须找到小于给定数量(由用户给出)的最小回文,其必须是两个三位数的倍数。我得到了回文部分,但我被困在“多个”部分。我能够理清素数,但无法弄清楚  还要别的吗。 编辑: - 似乎我在我的问题中不清楚,所以这里的一个例子101101是回文,也是两个三位数(143和107)的产品,这也是这种类型的最小回文 这是我的源代码

#include <iostream>

using namespace std;



int main(){int t ;
cin >> t ;
for (int a0=0 ; a0<t ; a0++){int n ;
cin >> n ;
while(n>101101){



int num , rev = 0 , dig ;
num = n ;
while(num != 0 ){
    dig = num%10;
    rev= (rev*10) + dig ;
    num = num /10;
}
if (rev==n ){
    cout << n ;
    break ;

}
else {
    n= n -1;
}}}}

2 个答案:

答案 0 :(得分:0)

这里的代码有一个函数,它将检查回文数是否是两个三位数的乘积。

#include <iostream>
using namespace std;

bool checkMultiple(int num)
{
    for(int i=100 ; i<=999; i++)
{
    for(int j=100 ; j<=999; j++)
    {

        if((i*j) == num) 
        {
           // cout<<i<<"*"<<j<<"="<<num<<endl;
            return true;
        }
    }
}
     return false;
}

int main()
{
   int t ;
   cin >> t ;
   for (int a0=0 ; a0<t ; a0++)
   {
    int n ;
    cin >> n ;
    while(n>101101)
    {
        int num , rev = 0 , dig ;
        num = n ;
        while(num != 0 )
        {
            dig = num%10;
            rev= (rev*10) + dig ;
            num = num /10;
        }
        if (rev==n )
        {
                bool palindrome = checkMultiple(n);
                if(palindrome) 
                {
                    cout << n ;
                    break ;
                }


        }
        else 
        {
            n= n -1;
        }
    }
 }
system("pause");
return 0;
}

答案 1 :(得分:0)

由于您已经找到了回文部分,请尝试使用多个部分:

  1.check if it is a multiple of a 3 digit num (% operator)
  2.if you get one (call n1) ,run the loop again for another similar 3         digit num other than n1, then you've got your palindrome.
  3.then run another outtermost loop which executes till you get your result, checking each possible palin as mentioned above.