byプログラマ脳を鍛える数学パズル2020-01-15soonプログラマ脳を鍛える数学パズルという本を買いました。知らず知らずのうちにアルゴリズムを身に着くということで先輩もおすすめしており、より良いコードを書くために勉強になるのではないかと思っております。今回はこの本の最初の問題『10進数で回文』を少し変えてJavaで書いてみたいと思います。※本の問題をそのまま書くわけにもいかないので...問題11~1000のうち10進数、2進数、8進数のいずれで表しても回文数になる数字はどれか?回文数とは先頭から読んでも後ろから読んでも同じ数になる数字です。例)10進数の9=1001(2進数)=11(8進数)となり、2進数と8進数では回文になっています。これが11~1000の中で10進数、2進数、8進数で回文が揃う数字を探すという問題になります。コード11~1000をループさせ、その中で10進数を2進数と8進数に変換し、さらに反転させたものと比べるというのがオーソドックスな考えかたでしょうか?ということで以下がコードになります。sb.reverse().toString();}}7行目で2進数へ変換し、8行目で8進数へ変換しています。えは585になりました。本はrubyで書かれているのですが、while(true)で無限ループにして、回文数を見つけたらif文の中でbreakしてループを止めていました。2進数で1桁目が0になると、反転したら01となり、これは数字として不適切なため1番右側の数字は1となります。奇数を探せばいいので奇数だけでループを処理し、高速化しています。コードを書いて実現するだけでなく、効率よく動かすためのヒントも書いてあるのでためになります。気になる問題があったら自分でもコードを書いていきたいと思います。関連記事Qiitaに初めて投稿してみました。最新記事soon1986年生まれのjavaプログラマー。28歳の時に7年働いた販売士からプログラマーに転職をする。常駐先を転々としながら日々生きています。2023-03-15おやすみ、世界。天国な職場って?■このブログについて地方で在宅ワークをしているエンジニアです。未経験からプログラマに転職した筆者による生活を書いています。labo=soonの研究所という意味でつけました。soon在宅エンジニアとして働いています。現状整理の日記おやすみ、世界。グーグルアドセンス」を利用しています。広告配信事業者は、ユーザーの興味に応じた広告を表示するためにCookie(クッキー)を使用することがあります。Google」をご覧ください。ソフトウェア開発者の人生マニュアル』を読みました。