LoginSignup
7
8

More than 5 years have passed since last update.

プログラマの考えが・・身につく本より:2倍した結果が2桁になったら各桁を合算する

Last updated at Posted at 2016-04-13

毎日、本のコードをpythonのして備忘録書き綴っていこうと
思っていたら早速3日坊主になってしまった。
本の演習問題を解くことが最初の目的だったけど、たどり着くまでに
僕の頭では理解が時間がかかるので解答あり(C++)でも
自分なりにpythonにして更新してみます。(もっと理解早い頭が欲しい。。)
まあ、でも書くしか理解できないから続けてみます。
(是非とも壮大なツッコミとともにコードへのご意見お待ちしてます)
コピペってとこも情けないですけど書いてみます

2.3入力の処理/問題:「ルーンチェックサムの検証」

ルーン式は、識別番号の検証によく使われる方式だ。元の数字の各桁に対して、1桁おきにその数字を2倍する。そのあとで、各桁の数字を足していく(2倍した結果が2桁になる数字があれば、十の位と一の位をそれぞれ個別に足していく)。その合計が10で割り切れる場合に、識別番号は妥当なものであると見なす。
任意の長さの識別番号を受け取り、その値がルーン式で妥当かどうかを調べるプログラムを書こう。このプログラムでは、1つの桁を読み込んだら次の桁に進む前に、その桁の処理をすませなければいけない。
問題に出てくる識別番号は:176248

いきなり大きな問題の答えが導けないので
・・・昨日1日ここでストップ。。。最後のコードが大きすぎて(自分には)
とりあえず本にも記載がある通り対処すべき4つの課題を1個づつ進める


  1. どの桁を2倍にすればいいのかを知る
  2. 2倍した結果が2桁になったときに、それぞれの桁を個別に扱う
  3. 数値を最後まで読み終えたことを知る
  4. 各桁を個別に読み込む

小問題:2倍した結果が2桁になったときに、それぞれの桁を個別に扱う

C++の解答(本より)

int doubleDigitValue(int digit){
    int doubledDigit = digit * 2
    int sum;
    if (doubledDigit >= 10) sum = 1 + doubledDigit % 10;
    else sum = dubledDigit;
    return sum;

僕のPythonなら

:test.py
#!/usr/bin/env python
#coding:utf-8

def doubleDigitValue(digit):
    doubledDigit = digit * 2
    if (doubledDigit >= 10):
        sum = 1 + doubledDigit % 10 //間違えていたので訂正しました(さらに修正4/15
    else:
        sum = doubledDigit
    return sum

・・・
>>> from test import doubleDigitValue
>>> doubleDigitValue(7)
5

なんの工夫もできませんでしたが、とりあえず予定通り動いた。

7
8
7

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8