剰余の使い道

どんな時に使えばいいか分からなかったので。例コピペ。負の剰余は注意が必要らしい。

 

あまり剰余%mod ( modulo の略 )。
被除数 / 除数 = 商 … 剰余
9 / 2 = 4 … 1

 

商 × 除数剰余 = 被除数
4 * 2 + 1 = 9

 

除算によって「割り切れない」部分を表わす。
自然数の除法について、剰余除数より小さくなるように取られている。
自然数 n を 3 で割ると、余りは0,1,2 の 3 個のみ。
0→1→2→0→1→2 などと循環して処理するものがあるときに使える。
「ランダム関数 % n 」で、n 種類をランダムに出すなど。
除法:割り算。除算。

 

カレンダー生成

月の日数は 2 月以外決まっている。にしむく士 が 30 日。2 4 6 9 11
( day - 1 ) % 7 0 ~ 6 の値が返り、曜日の位置を揃えることが出来る。
X  = ( day - 1 ) :朔日を 0 ( 日曜 ) とした場合。 0 / 7 = 0

= X / 7 :小数点切り捨て
= X % 7 :曜日が求まる

※ 表示位置は朔日の曜日により位置の調節が必要。

 

--memo--
ツェラーの公式 を使うと 西暦年月日 を返す。
windows の 右下にあるカレンダーのようなものを作成しようとすると
他いろいろ閏年など考慮する要素が必要なもよう。

・日曜を 0 、月曜を 1 … 、土曜を 6 。
2018 / 11 の朔日は 4 の木曜。 ( 朔日 + 3 ) % 7 = 4 となるので、
( day + 3 ) % 7 = 曜日 となる。

 

時刻を求める

150 秒は何分何秒か。
150 / 60 = 2.5 となるので、 % を使う。
x = 150

min = ( x - x % 60 ) / 60   // または x / 60 ( 小数切り捨て )
sec = x % 60

2 分 30 秒となる。

 

トランプゲームを作成する

4 つの種類が各 13 枚の計 52 枚。
スペード・ハート・クローバ・ダイヤの順に 0 ~ 51 連番
余りを使うと、 0 ~ 12 までの値のみを求められる。ex ) 15 なら ハートの 2 。

Card :0 ~ 51
Mark :0 ~ 3 ( スペード:0  ハート:1 … )
Tranp:0 ~ 12
Mark  = Card / 13 ( マークが求まる。小数切り捨て )
Tranp = Card % 13 ( 番号が求まる )

なお、ジョーカーは 52 とでも。 

 

レポート作成

5 明細ごとに色を引く交互に色分けるなど。

明細:カウント値 % 5 → 0 の時に赤色の線をひく、1 の時に青色…
交互:カウント値 % 2 → 0 の時に灰色にする。

 

他、100 件ごとのページめくりなど。

 

FizzBuzz 問題を解く

プログラマー採用試験として FizzBuzz 問題のプログラムを書くことがあるもよう

問題:
数字を列挙し、
3 の倍数なら fizz、5 の倍数なら buzz、15 の倍数なら fizzbuzz
出力するプログラムをかけ。

    for i in range(1,101):
        if i % 15 == 0:
            print 'FizzBuzz'
        elif i % 5 == 0:
            print 'Buzz'
        elif i % 3 == 0:
            print 'Fizz'
        else:
            print i

 

 

チェックデジットに使用

チェックデジットとは 誤読を防止するための検査数字のこと。

一般に数値コードがあるものには、
本来の数値コードにチェックデジット用に 1 桁が追記されている。

 

 

 

 

こちらから。
https://qiita.com/yaju/items/aad350c6662d9d3b77cd
https://ja.wikipedia.org/wiki/%E9%99%A4%E6%B3%95
https://qiita.com/yama-t/items/74522560cc3848a9d8cf
http://blogs.wankuma.com/yaju/archive/2007/09/07/94506.aspx
http://yasu-game.hatenablog.com/entry/2017/02/24/022057
http://tricky-code.net/datastructure/ds05weekd.php
http://bbs.wankuma.com/index.cgi?mode=al2&namber=61153&KLOG=102

以上。