欢迎访问我的新博客:http://www.milkcu.com/blog/

原文地址:http://www.milkcu.com/blog/archives/1371281760.html

原创:【欧拉计划4】Largest palindrome product

摘要:找出两个3位数乘积得到的最大回文数

作者:MilkCu

题目描述

Problem 4  Largest palindrome product

A palindromic number reads the same both ways. The largest palindrome made from the product of two 2-digit numbers is 9009 = 91 99.

Find the largest palindrome made from the product of two 3-digit numbers.

我的解答

第一次做的答案是580085,提交后提示错误,原来程序逻辑错误,得出的并不是最大的。增加max判断后,程序就对了。

# include <stdio.h>

int isPal(int n);
int reverse(int n); int main(void)
{
int p;
int max = 0;
for(int i = 999; i >= 100; i--) {
for(int j = 999; j >= i; j--) {
p = i * j;
if(isPal(p)) {
if(p > max) {
max = p;
} else {
break;
}
}
}
}
printf("%d\n", max);
} int isPal(int n)
{
if(n == reverse(n)) {
return 1;
} else {
return 0;
}
} int reverse(int n)
{
int r = 0;
do {
r = r * 10 + n % 10;
} while(n /= 10);
return r;
}

不断改进

看了projecteuler.net给的pdf,内容大致如下:

  1. 变量j的循环从i开始;
  2. 变量i和j的循环由大到小;
  3. 回文数必被11整除;

从第三点得到的启发还是很大的。

我们可以从下面的关系式得出这个结论:

P = 100000x + 10000y + 1000z + 100z + 10y + x

P = 100001x + 10010y + 1100z

P = 11 * (9091x + 910y + 100z)

改进后的代码如下:

# include <stdio.h>

int isPal(int n);
int reverse(int n); int main(void)
{
int p;
int max = 0;
int i, j, step;
for(i = 999; i >= 100; i--) {
if(i % 11 == 0) {
j = 999;
step = 1;
} else {
j = 990;
step = 11;
}
for(; j >= i; j--) {
p = i * j;
if(isPal(p)) {
if(p > max) {
max = p;
} else {
break;
}
}
}
}
printf("%d\n", max);
} int isPal(int n)
{
if(n == reverse(n)) {
return 1;
} else {
return 0;
}
} int reverse(int n)
{
int r = 0;
do {
r = r * 10 + n % 10;
} while(n /= 10);
return r;
}

最后答案

906609

(全文完)

【欧拉计划4】Largest palindrome product的更多相关文章

  1. 欧拉计划之Largest palindrome product

    A palindromic number reads the same both ways. The largest palindrome made from the product of two 2 ...

  2. 通过欧拉计划学Rust编程(第500题)

    由于研究Libra等数字货币编程技术的需要,学习了一段时间的Rust编程,一不小心刷题上瘾. "欧拉计划"的网址: https://projecteuler.net 英文如果不过关 ...

  3. 刷完欧拉计划中难度系数为5%的所有63道题,我学会了Rust中的哪些知识点?

    我为什么学Rust? 2019年6月18日,Facebook发布了数字货币Libra的技术白皮书,我也第一时间体验了一下它的智能合约编程语言MOVE,发现这个MOVE是用Rust编写的,看来想准确理解 ...

  4. 用欧拉计划学Rust编程(第26题)

    最近想学习Libra数字货币的MOVE语言,发现它是用Rust编写的,所以先补一下Rust的基础知识.学习了一段时间,发现Rust的学习曲线非常陡峭,不过仍有快速入门的办法. 学习任何一项技能最怕没有 ...

  5. 通过欧拉计划学习Rust编程(第22~25题)

    最近想学习Libra数字货币的MOVE语言,发现它是用Rust编写的,所以先补一下Rust的基础知识.学习了一段时间,发现Rust的学习曲线非常陡峭,不过仍有快速入门的办法. 学习任何一项技能最怕没有 ...

  6. 用欧拉计划学Rust语言(第17~21题)

    最近想学习Libra数字货币的MOVE语言,发现它是用Rust编写的,所以先补一下Rust的基础知识.学习了一段时间,发现Rust的学习曲线非常陡峭,不过仍有快速入门的办法. 学习任何一项技能最怕没有 ...

  7. 用欧拉计划学习Rust编程(第13~16题)

    最近想学习Libra数字货币的MOVE语言,发现它是用Rust编写的,所以先补一下Rust的基础知识.学习了一段时间,发现Rust的学习曲线非常陡峭,不过仍有快速入门的办法. 学习任何一项技能最怕没有 ...

  8. 用欧拉计划学Rust语言(第7~12题)

    最近想学习Libra数字货币的MOVE语言,发现它是用Rust编写的,所以先补一下Rust的基础知识.学习了一段时间,发现Rust的学习曲线非常陡峭,不过仍有快速入门的办法. 学习任何一项技能最怕没有 ...

  9. 通过欧拉计划学Rust(第1~6题)

    最近想学习Libra数字货币的MOVE语言,发现它是用Rust编写的,看来想准确理解MOVE的机制,还需要对Rust有深刻的理解,所以开始了Rust的快速入门学习. 看了一下网上有关Rust的介绍,都 ...

随机推荐

  1. cocos2d-x 网络请求

    [cocos2dx]rapidjson用法以及中文显示的解决方法 cocos2dx 读取json及解析 cocos2dx rapidjson 高速解析JSON  --- [cocos2d-x官方文档] ...

  2. ios swift学习日记1-Swift 初见

    最近ios的swift语言似乎火了,我没有objectc基金会,但在此之前有cjava的基础的.从这几天開始学习ios的swift语言.后期以博客形式公布.这里提供一本翻译的英文版的swif书籍. 还 ...

  3. 怪异php 语法, 求解!

    查找php馍用来推断是否串串返回值和方法 strpos很奇怪. 请看下面的语句: echo "A1: ".(strpos("csd","c" ...

  4. 【iOS开展-94】xcode6如何使用GIT以及如何添加太老项目GIT特征?

    (1)对于一个新项目:如何使用GIT?在新项目的过程,例如,您可以选择下面的复选框. (2)针对老项目,加入GIT功能. --在终端.cd到项目文件夹 --然后输入git init,初始化一个.git ...

  5. linux_java_redis_postgresql_常用命令

     redis 常用语法telnet 192.168.18.210 6379keys *llen队列名称llen 队列名称 postgresql常用语法psql -h192.168.18.210 -Up ...

  6. Microsoft Build 2015

    Microsoft Build 2015 汇总   简要概括(GitHub 完成约 45%): Visual Studio Code Preview Visual Studio 2015 RC Vis ...

  7. CSharp设计模式读书笔记(24):访问者模式(学习难度:★★★★☆,使用频率:★☆☆☆☆)

    模式角色与结构: 示例代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; ...

  8. android屏蔽home键的实现

    Android中,网上很多屏蔽Home键都智能在4.0以下运行,在4.0以及以上运行直接崩溃. 需要这样更改(来源:http://androidmaster.iteye.com/): @Overrid ...

  9. 2014牡丹江区域赛H(特里)ZOJ3826

    Hierarchical Notation Time Limit: 2 Seconds      Memory Limit: 131072 KB In Marjar University, stude ...

  10. linux open

    一直记住不打开文件时候的mode,今天发现原来可以直接用0644这样的八进制数字代替,好开森 #include <stdio.h> #include <sys/types.h> ...