【欧拉计划4】Largest palindrome product
欢迎访问我的新博客: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,内容大致如下:
- 变量j的循环从i开始;
- 变量i和j的循环由大到小;
- 回文数必被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的更多相关文章
- 欧拉计划之Largest palindrome product
A palindromic number reads the same both ways. The largest palindrome made from the product of two 2 ...
- 通过欧拉计划学Rust编程(第500题)
由于研究Libra等数字货币编程技术的需要,学习了一段时间的Rust编程,一不小心刷题上瘾. "欧拉计划"的网址: https://projecteuler.net 英文如果不过关 ...
- 刷完欧拉计划中难度系数为5%的所有63道题,我学会了Rust中的哪些知识点?
我为什么学Rust? 2019年6月18日,Facebook发布了数字货币Libra的技术白皮书,我也第一时间体验了一下它的智能合约编程语言MOVE,发现这个MOVE是用Rust编写的,看来想准确理解 ...
- 用欧拉计划学Rust编程(第26题)
最近想学习Libra数字货币的MOVE语言,发现它是用Rust编写的,所以先补一下Rust的基础知识.学习了一段时间,发现Rust的学习曲线非常陡峭,不过仍有快速入门的办法. 学习任何一项技能最怕没有 ...
- 通过欧拉计划学习Rust编程(第22~25题)
最近想学习Libra数字货币的MOVE语言,发现它是用Rust编写的,所以先补一下Rust的基础知识.学习了一段时间,发现Rust的学习曲线非常陡峭,不过仍有快速入门的办法. 学习任何一项技能最怕没有 ...
- 用欧拉计划学Rust语言(第17~21题)
最近想学习Libra数字货币的MOVE语言,发现它是用Rust编写的,所以先补一下Rust的基础知识.学习了一段时间,发现Rust的学习曲线非常陡峭,不过仍有快速入门的办法. 学习任何一项技能最怕没有 ...
- 用欧拉计划学习Rust编程(第13~16题)
最近想学习Libra数字货币的MOVE语言,发现它是用Rust编写的,所以先补一下Rust的基础知识.学习了一段时间,发现Rust的学习曲线非常陡峭,不过仍有快速入门的办法. 学习任何一项技能最怕没有 ...
- 用欧拉计划学Rust语言(第7~12题)
最近想学习Libra数字货币的MOVE语言,发现它是用Rust编写的,所以先补一下Rust的基础知识.学习了一段时间,发现Rust的学习曲线非常陡峭,不过仍有快速入门的办法. 学习任何一项技能最怕没有 ...
- 通过欧拉计划学Rust(第1~6题)
最近想学习Libra数字货币的MOVE语言,发现它是用Rust编写的,看来想准确理解MOVE的机制,还需要对Rust有深刻的理解,所以开始了Rust的快速入门学习. 看了一下网上有关Rust的介绍,都 ...
随机推荐
- zoj 3659 并检查集合
http://acm.zju.edu.cn/onlinejudge/showProblem.do? problemId=4882 现在在牡丹江,明天regional直播比赛,我会在一个月内退休.求祝福 ...
- 记得12306货运系统“抢购空”编写插件--chrome交互式插件的各个部分
--chrome交互式插件的各个部分 Chrome插件的基础知识就不多说了.随便找个新手教程就能够上手了,比如官方提供的Overview与Getting Started教程足够入门了:笔者也是现学现卖 ...
- sqlplus登录问题
问题1.sqlplus login -- SP2-0750: You may need to set ORACLE_HOME to your Oracle software directory 在/e ...
- Android 使用DexClassLoader要执行其他apk方法
Android在apk文件dex文件是java编译出来.class次打包,当然在打包之前会利用自己的协议做一些数据处理,比如优化函数表和变量表.在java程序中是使用classloader来载入这些编 ...
- ubuntu 14.04 hadoop eclipse 0配置基本环境
动人的hadoop第二天.构造hadoop该环境还花了两天时间,在这里写自己配置的过程,我希望能帮助! 我将文中用到的全部资源都分享到了 这里,点开就能下载,不须要一个个的找啦! 当中有<Ha ...
- js的逻辑 OR 运算符- ||
逻辑or运算大家都很熟悉,都会用.但是在javascript中用的更多,用的更妙.有时候用它来解决兼容问题特别方面.简洁. 比如获取鼠标对象.在 Internet Explorer 里, event ...
- crawler_编码转换_unicode(年)
import java.util.regex.Matcher; import java.util.regex.Pattern; /** * @declare: unicode 帮助类<br> ...
- 基OOP知识
从今天开始,我开始总结GAO还通高老师<android道路的建筑师>,尝试一个星期写三个博客. 相对而言.看到这篇文章有点速度比你可以观看视频,刚才看的视频是更具体的.假设有兴趣,跟着我去 ...
- JS开发调试
开发调试工具 页面制作之开发调试工具(1) 开发工具介绍 开发工具一般分为两种类型:文本编辑器和集成开发环境(IDE) 常用的文本编辑器:Sublime Text.Notepad++.EditPl ...
- ASP.NET学习笔记--自己写的Login.aspx
以前有大学有学过,但是没学好,现在准备完全自己动手做一个网站,学习一下ASP.NET 做一个登录页面,首先要有创建一个新的网站,添加Login.aspx,然后做出自己想要的DIV和CSS布局, 之后创 ...