整数の各桁の和を合計したものを数字和といいます。例えば、12345の場合は、15になります。
プログラミングの演習問題には、この数字和を使った処理があちこちで登場します。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つづつ取り出しています。