####左右どちらから読んでも同じ値になる数を回文数という. 2桁の数の積で表される回文数のうち, 最大のものは 9009 = 91 × 99 である.
####では, 3桁の数の積で表される回文数の最大値を求めよ.
Problem2は**こちら**から
解くために必要なことは
①三桁かける三桁の計算
②左右から読んで同じ数字を抜き出す
③その中の最大の値を求める
で、できるはず
とりあえず①に関しては、for関数を使えばなんとかなりそう
②には今のところ全く解き方が思い浮かばないのでググる
③は抜き出した数値を変数に「今の変数の値より大きいときのみ」上書きすればできるはず
ということでとりあえず①から解いてみる
for a in range(100,1000):
for b in range(100,1000):
seki = a * b
print(seki)
99900
100899
101898
102897
省略
995004
996003
997002
998001
端折りましたがかなりの数が出てきたので多分成功しているはず
これで変数sekiに3桁かける3桁の解を1回は出力させれたはずなので
②の回文数の求め方をググります
びっくりするくらいぴったりのやり方を見つけられた
[https://qiita.com/okkn/items/54e81346d8f35733ab5e:title]
ここのサイト曰く
逆順にしたけりゃ[リストor文字列][::-1]にしとけ!!
とのことなので**[::-1]を使えばリストの中の数字が逆順になるらしい**
試してみる
a = [1,2,3,4,5,6,7,8,9]
print(a[::-1])
[9,8,7,6,5,4,3,2,1]
逆順になっているのでこのまま②の部分までプログラムを作ってみる。
とりあえず、[::-1]を使って逆順にした変数と元の変数がイコールの時のみ抜き出したい。
for a in range(100,1000):
for b in range(100,1000):
seki = a * b
seki_gyaku = seki[::-1]
if seki == seki_gyaku:
kaisuu = seki
print(kaisuu)
エラーが出てしまった...
何が違うのか考える。
先ほどのサイトに答えが書いてあった...
[::-1]を使えるのは、リストか文字列のみみたい
書き直してみる
for a in range(100,1000):
for b in range(100,1000):
seki = a * b
seki_gyaku = str(seki[::-1])
if seki == seki_gyaku:
kaisuu = seki_gyaku
print(kaisuu)
またもやエラー
調べてるうちに
if seki == seki_gyaku:
のsekiとseki_gyakuとで属性がちがうらしい
詳しく言うと、sekiはint(整数)でseki_gyakuはstr(文字列)とのこと
考えてみれば、strで属性を変えたものと変える前を比べたらできないのが当たり前かも
というわけで同じstr同士でif文を作てっみる
for a in range(100,1000):
for b in range(100,1000):
seki = a * b
seki_gyaku = str(seki)
if seki_gyaku == seki_gyaku[::-1]:
kaisuu = seki_gyaku
print(kaisuu)
省略
282282
119911
906609
514415
580085
いろいろ出てきたけど回数文しか出てきてないから成功のはず
あとは最大値を抜き取るだけ
最大値はif文を使えばできそう
とりあえずkotaeという変数を用意してそこに答えを詰め込む
kotae = 0
省略
if seki_gyaku == seki_gyaku[::-1]:
kaisuu = seki_gyaku
if kaisuu > kotae:
kotae = kaisuu
print(kotae)
先ほどの続きで書いたけどエラー
でもこれはすぐわかった
さっきと同じでint型とstr型を比べているから
なんとかkaisuuをstr型からint型にしたい
ググる
[https://note.nkmk.me/python-str-num-conversion/:title]
int()でint型にできるらしい
ということで
kotae = 0
for a in range(100,1000):
for b in range(100,1000):
seki = a * b
seki_gyaku = str(seki)
if seki_gyaku == seki_gyaku[::-1]:
kaisuu = seki_gyaku
if int(kaisuu) > kotae:
kotae = int(kaisuu)
print(kotae)
906609
[http://kingyojima.net/pje/004.html:title]
あってるーーーー
Problem5は**こちら**から