各桁の和(整数和)を使った処理。(C#、Java、JavaScript、PHP、Python3、Ruby)

 整数の各桁の和を合計したものを数字和といいます。例えば、12345の場合は、15になります。

数字和 wiki

 プログラミングの演習問題には、この数字和を使った処理があちこちで登場します。aまでの整数の中で、各桁の和がbになっている数値の個数を出力するといったように。

 今回は、この数字和を求める処理と、数字和を使って1~aの整数の中で数字和がbになっている数値の個数を出力する処理について、C#、Java、JavaScript、PHP、Python3、Rubyの6言語でコードを書いてみました。

整数和を求める処理ですが、

1.入力された数値を文字列に変換。
2.この文字列から各桁の数字を1文字づつ取り出し、整数変換して数値として扱えるようにしてから変数に加算。

でOKです。

 各桁の数字の取り出し方ですが、文字列から1文字づつ切り出す、空文字で切って配列に入れてから1個づつ取り出すなどの方法があります。

 それから、数字和を使った処理として、1~100までの整数の中で、各桁の和が15である数値の個数を出力します。1~100までのそれぞれの整数について各桁の和を求め、これが15と等しいものをカウントして出力します。

C#
using System;

public class Sample{
    //各桁の和(数字和)を出力するメソッド
    public static int digitSum(int num){
        var str = num.ToString();
        int sum = 0;

        for (int i1 = 0; i1 < str.Length; i1++){
            sum += int.Parse(str.Substring(i1,1));
        }
        return sum;
    }

    public static void Main(){
        //1~aの整数のうち、各桁の和がbである整数の個数
        int a = 100;
        int b = 15;
        int count = 0;

        for (int i = 1; i <= a; i++){
            if (digitSum(i) == b){
                count += 1;
            }
        }
        Console.WriteLine(count);
    }
}

 各桁の数字の取り出しは、渡された数値を文字列化してから1文字づつ取り出しています。

Java
import java.util.*;

public class Main {
    //各桁の和(数字和)を出力するメソッド
    public static int digitSum(int num){
        var box = String.valueOf(num).split("");

        int sum = 0;
        for (int i1 = 0; i1 < box.length; i1++){
            sum += Integer.parseInt(box[i1]);
        }

        return sum;
    }

    public static void main(String[] args) throws Exception {
        //1~aの整数のうち、各桁の和がbである整数の個数
        int a = 100;
        int b = 15;
        int count = 0;

        for (int i = 1; i <= a; i++){
            if (digitSum(i) == b){
                count += 1;
            }
        }
        System.out.println(count);
    }
}

 各桁の数字の取り出しは、渡された数値を文字列化してから空文字で切って配列に入れ、要素を1つづつ取り出しています。

JavaScript
process.stdin.resume();
process.stdin.setEncoding('utf8');

//各桁の和(数字和)を出力するメソッド
function digitSum(num){
    var line = String(num).split('');
    var sum = 0;

    for (var i1 = 0; i1 < line.length; i1++){
        sum += parseInt(line[i1]);
    }
    return sum;
}

//1~aの整数のうち、各桁の和がbである整数の個数
var a = 100;
var b = 15;
var count = 0;

for (var i = 1; i <= a; i++){
    if (digitSum(i) === b){
        count += 1;
    }
}

console.log(count);

 各桁の数字の取り出しは、渡された数値を文字列化してから空文字で切って配列に入れ、要素を1つづつ取り出しています。

PHP
<?php
//各桁の和(数字和)を出力するメソッド
function digitSum($num){
    $line = strval(trim($num));
    $sum = 0;

    for ($i1 = 0; $i1 < strlen($line); $i1++){
        $sum += intval(substr($line, $i1, 1));
    }

    return $sum;
}

//1~aの整数のうち、各桁の和がbである整数の個数
$a = 100;
$b = 15;
$count = 0;

for ($i = 1; $i <= $a; $i++){
    if (digitSum($i) == $b){
        $count += 1;
    }
}

echo $count ."\n";
?>

 各桁の数字の取り出しは、渡された数値を文字列化してから1文字づつ取り出しています。

Python3
#各桁の和(数字和)を出力するメソッド
def digitSum(num):
    line = str(num)
    sum = 0

    for i1 in range(0,len(line)):
        sum += int(line[i1])

    return sum

#1~aの整数のうち、各桁の和がbである整数の個数
a = 100
b = 15
count = 0

for i in range(0, a + 1):
    if digitSum(i) == b:
        count += 1

print(count)

 各桁の数字の取り出しは、渡された数値を文字列化してから1文字づつ取り出しています。

Ruby
#各桁の和(数字和)を出力するメソッド
def digitSum(num)
    box = num.to_s.split('').map(&:to_i)
    return box.sum
end

#1~aの整数のうち、各桁の和がbである整数の個数
a = 100
b = 15
count = 0

for i in 1..a
    if digitSum(i) == b
        count += 1
    end
end

puts count

 各桁の数字の取り出しは、渡された数値を文字列化してから空文字で切って配列に入れ、要素を1つづつ取り出しています。

にほんブログ村 ゲームブログへ

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする