欢迎访问我的新博客: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. java数据结构系列——排列(2):有序阵列

    package Array; /** * 对数组排序.当添加到阵列保持有序数组元素: * @author wl * */ public class MyOrderArray { private lon ...

  2. android该系统的应用API选择演示版本

    转载请注明出处[http://blog.csdn.net/y150481863/article/details/41280045] 首先我们在开发一个应用之前,特别是一个android应用.首先要考虑 ...

  3. jquery选择器中逗号的使用

    1.多条件选择器 多条件选择器:$("p,div,span.menuitem"),同时选择p标签,div标签,和拥有menuitem样式的span标签元素 <table id ...

  4. ContentType是否大小写区分?

    ContentType控制web类型输出.无论是大小写是否区分? 例如: context.Response.ContentType = "application/json"; co ...

  5. 从头开始学JavaScript (七)——函数

    原文:从头开始学JavaScript (七)--函数 一.return 函数在执行完return之后停止并立即退出. return返回值:与return: 如下两个例子: function sum(n ...

  6. hardware_hp刀片服务器安装windows 2008系统配置

    2012年10月26日星期五 第一步. 看刀片机柜的后的OA地址 点击 OK 查看 Actlve OA 例如: 192.168.254.31 l 第二步: 连接PC 到左侧第一个接口 修改本机ip为同 ...

  7. Hash散列算法 Time33算法

    hash在开发由频繁使用.今天time33也许最流行的哈希算法. 算法: 对字符串的每一个字符,迭代的乘以33 原型: hash(i) = hash(i-1)*33 + str[i] ; 在使用时.存 ...

  8. 【百度地图API】如何给自定义覆盖物添加事件

    原文:[百度地图API]如何给自定义覆盖物添加事件 摘要: 给marker.lable.circle等Overlay添加事件很简单,直接addEventListener即可.那么,自定义覆盖物的事件应 ...

  9. Msgbox消息框

    于"自"<软件开发工具>一本书有这样的制剂,让我回忆--程序员可以做,让用户做:它允许用户做的少,即使是那些谁需要做的程序设置.我们应该做的. 这不是宣言.该是践行. ...

  10. cocos2d-x plist在拍照

    if(!CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("scrollicon_bg.png" ...