【C言語】入力した数値の一の位を求め、それを割り切る数を表示するプログラム
本記事では、C言語を用いて「入力された数値の一の位を取り出し、その一の位を割り切ることができる数をすべて表示する」プログラムの作成方法を解説します。
入力 − N = 326
出力 − 一の位は 6。6 を割り切る数は 2 と 3。
一の位を求める基本テクニック
任意の整数の一の位は、その数を 10 で割った余り(N % 10)を計算するだけで簡単に取得できます。
例えば、数値 N = 326 に対して「326 % 10」を計算すると余りの 6 が返され、これがまさに一の位です。剰余演算子(%)は桁操作の基本となる重要な演算子なので、覚えておくとさまざまな場面で役立ちます。
アルゴリズム
START
Step 1 -> 変数 num・num2・i を宣言する
Step 2 -> 数値 num を入力する
Step 3 -> num%10 の計算結果を num2 に格納し、一の位を取得する
Step 4 -> num2(一の位)を表示する
Step 5 -> i=2 から i<=num2/2 になるまで ++i で繰り返す
IF num2%i==0 ならば
i を表示する
End IF
Step 6 -> For ループ終了
STOP
サンプルコード
#include<stdio.h>
int main() {
int num, num2, i;
printf("\nenter a number");
scanf("%d", &num);
num2 = num % 10; // 一の位を num2 に格納
printf("\n unit digit of %d is: %d", num, num2);
for(i = 2; i <= num2 / 2; ++i) { // 一の位の半分まで調べる
if(num2 % i == 0) { // 割り切れるかどうかを判定
printf("\n multiple of %d is : %d ", num2, i);
}
}
return 0;
}
実行結果
上記のプログラムをコンパイルして実行すると、以下のような出力が得られます。
enter a number329 unit digit of 329 is: 9 multiple of 9 is : 3
ポイント解説
・ループ範囲を「一の位の半分(num2/2)」までにしているのは、それより大きい数で一の位を割り切れるケース(その数自身を除く)が存在しないためです。無駄な計算を省き、効率よく候補となる数を見つけられます。
・一の位が 0 や 1 の場合は条件を満たす数が存在せず、何も表示されません。必要に応じて例外処理を追加すると、より堅牢なプログラムになります。
-
数値を英語の単語に変換するCプログラムの書き方
数値で構成された文字列が与えられたとき、その数値を英語の単語(スペル表記)へ変換するのが本記事の課題です。例えば、入力が「361」であれば、出力は「Three hundred sixty one」となるようにします。この問題を解くためには、一の位・十の位・百の位・千の位など、それぞれの数字がどの桁に位置しているのかを意識することが重要です。なお、今回紹介するコードは最大4桁、つまり0から9999までの数値に対応しています。したがって、入力は0〜9999の範囲である必要があります。例として「1,111」を考えてみましょう。各桁は以下のように対応します。千の位:1(one thousand)百の位
-
Pythonで与えられた数の素因数をすべて効率的に出力するプログラムの作成方法
本記事では、与えられた整数の素因数(そいんすう)をすべて効率的に求めて出力するPythonプログラムについて詳しく解説します。 問題文 ある整数 n が与えられたとき、その数を構成するすべての素因数を見つけて出力することです。 例えば 200 の場合、200 = 2 × 2 × 2 × 5 × 5 と分解できるため、出力は「2, 2, 2, 5, 5」となります。 効率的なアプローチとは 2からnまですべての数で割り切れるかを順番に確認する素朴な方法では、計算量が O(n) かかり非効率です。そこで、次の3つの性質を利用することで、計算量を O(√n) まで削減できます。 まず2で割れるだけ