各位の和を 10 の倍数にする

宿題というのはどういうことを教えられたかによって解法が異なりますから、同じ答えが導き出せてもそれが求められている解答かどうかが他人には分かりません。 今回はC言語わかるやつちょっときてくr…きてください!からです。

難しい問題ではないのですが、awk 的なところを挙げると以下のようなものがあります。

  • キーボードのような標準入力から入力を得るには getline を使います。
  • 各位に分割するには split() の第 3 引数を "" にして分割します。
  • 最後に足し合わせるのには連接を使うと簡単です。
#! /usr/bin/gawk -f
# multiple_10.awk

BEGIN {

    printf("6桁の数を入力してください: ");
    getline num;

    n_num = split(num, a_num, "");
    for (i = 1; i <= n_num; i++) {
        sum += a_num[i];
    }
    print "各桁の和: " sum;

    add_num =  (sum % 10) ? 10 - (sum % 10) : 0;
    print "付け加える数字: " add_num;

    print "得られた数: " num add_num;
}

実行してみます。

$ nawk -f multiple_10.awk
6桁の数を入力してください: 071501
各桁の和: 14
付け加える数字: 6
得られた数: 0715016

$ nawk -f multiple_10.awk
6桁の数を入力してください: 071507
各桁の和: 20
付け加える数字: 0
得られた数: 0715070

最初から各位の和が 10 の倍数の時には 0 にするように条件演算子で分けています。 一度に全部をやらずに手順を追って処理していく方がわかりやすいです。

tag_nawk.pngtag_nawk.pngtag_nawk.pngtag_nawk.png