最大回文乘积(欧拉项目)——C++; 我试图用C++解决Euler的工程问题。
回文数字的两种读取方式相同。由两个两位数的乘积构成的最大回文是9009=91×99。 查找由两个3位数字的乘积构成的最大回文最大回文乘积(欧拉项目)——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
这是我的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
和不断设置为-999num2
形成的数字
我怀疑您没有看到任何输出,因为没有任何数字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