digitSum

引数に指定した数字和(数値の各桁を足した結果)を返します。正の整数以外を指定した場合は、エラー値を返します。

構文
  1. Integer = digitSum( num )
引数
num
数値(正の整数)
戻値
各桁の数値の和

プログラム

//////////////////////////////////////////////////
// 【引数】
//   num : 数値(正の整数) 
// 【戻値】
//   各桁の数値の和 
//////////////////////////////////////////////////
FUNCTION digitSum(num)
	DIM res = 0
	IFB VARTYPE(ABS(num, VAR_DWORD)) = num THEN		// 正の整数ならば
		FOR n = 1 TO LENGTH(num)
			res = res + VAL(COPY(num, n, 1))
		NEXT
	ELSE
		res = ERR_VALUE
	ENDIF
	RESULT = res
FEND

プログラム実行例

各桁の和を求める

458の各桁の和(=4+5+8)を求める。

PRINT digitSum(458)

//////////////////////////////////////////////////
// 【引数】
//   num : 数値(正の整数) 
// 【戻値】
//   各桁の数値の和 
//////////////////////////////////////////////////
FUNCTION digitSum(num)
	DIM res = 0
	IFB VARTYPE(ABS(num, VAR_DWORD)) = num THEN		// 正の整数ならば
		FOR n = 1 TO LENGTH(num)
			res = res + VAL(COPY(num, n, 1))
		NEXT
	ELSE
		res = ERR_VALUE
	ENDIF
	RESULT = res
FEND
結果
17

ソウルナンバーを求める

桁が一桁になるか、ゾロ目になるまで各桁を足し続ける。

生年月日をyyyymmddの形式で指定する。

DIM n = 20000501

REPEAT
	n = digitSum(n)
UNTIL LENGTH(n) = 1 OR COPY(n, 1, 1) = COPY(n, 2, 1)

PRINT n

//////////////////////////////////////////////////
// 【引数】
//   num : 数値(正の整数) 
// 【戻値】
//   各桁の数値の和 
//////////////////////////////////////////////////
FUNCTION digitSum(num)
	DIM res = 0
	IFB VARTYPE(ABS(num, VAR_DWORD)) = num THEN		// 正の整数ならば
		FOR n = 1 TO LENGTH(num)
			res = res + VAL(COPY(num, n, 1))
		NEXT
	ELSE
		res = ERR_VALUE
	ENDIF
	RESULT = res
FEND
結果
8