C言語で日数を年・週・日に変換するプログラムの作り方
概要
この記事では、与えられた日数を年・週・日の3つの単位に変換するC言語プログラムを紹介します。ここでは簡単のため、うるう年は考慮せず、1年 = 365日として計算を行います。
変換の考え方
各単位への変換は、割り算の商と剰余(余り)を使って以下のように求められます。
年数の計算
年数 = 日数 ÷ 365
日数を365で割った商が、そのまま年数になります。
週数の計算
週数 = (日数 ÷ 365 の余り)÷ 7
まず日数を365で割った余りを求め、その結果を1週間の日数である7で割ります。得られた商が週数です。
残りの日数の計算
残り日数 = (日数 ÷ 365 の余り)÷ 7 の余り
365で割った余りをさらに7で割り、その際の剰余が最終的な残り日数となります。
入力例と出力例
Input-: days = 209
Output-: years = 0
weeks = 29
days = 6
Input-: days = 1000
Output-: years = 2
weeks = 38
days = 4アルゴリズム
Start
Step 1 -> 1週間の日数を表すマクロ const int n = 7 を宣言する
Step 2 -> 日数を年・週・日に変換する関数を宣言する
void find(int total_days)
変数 int year, weeks, days を宣言する
year = total_days / 365 を代入する
weeks = (total_days % 365) / n を代入する
days = (total_days % 365) % n を代入する
year, weeks, days を表示する
Step 3 -> main() 内で
int Total_days = 209 を宣言する
find(Total_days) を呼び出す
StopC言語での実装例
#include <stdio.h>
const int n = 7;
// 年・週・日を求める関数
void find(int total_days) {
int year, weeks, days;
// うるう年ではないものと仮定(1年 = 365日)
year = total_days / 365;
weeks = (total_days % 365) / n;
days = (total_days % 365) % n;
printf("years = %d", year);
printf("\nweeks = %d", weeks);
printf("\ndays = %d ", days);
}
int main() {
int Total_days = 209;
find(Total_days);
return 0;
}実行結果
上記のコードをコンパイルして実行すると、次のような出力が得られます。
years = 0 weeks = 29 days = 6
このように、整数型の除算とモジュロ演算(%)を組み合わせるだけで、特別なライブラリを使わずに日数を年・週・日へ簡単に変換できます。必要に応じて Total_days の値を変更すれば、任意の日数に対して同じ処理を適用できます。
-
数値を英語の単語に変換するCプログラムの書き方
数値で構成された文字列が与えられたとき、その数値を英語の単語(スペル表記)へ変換するのが本記事の課題です。例えば、入力が「361」であれば、出力は「Three hundred sixty one」となるようにします。この問題を解くためには、一の位・十の位・百の位・千の位など、それぞれの数字がどの桁に位置しているのかを意識することが重要です。なお、今回紹介するコードは最大4桁、つまり0から9999までの数値に対応しています。したがって、入力は0〜9999の範囲である必要があります。例として「1,111」を考えてみましょう。各桁は以下のように対応します。千の位:1(one thousand)百の位
-
Pythonで指定した数のグレイコードを求めるプログラムの作成方法
グレイコードとは? グレイコード(Gray Code)とは、隣り合う数値同士のビット表現が必ず「ちょうど1ビットだけ」異なるように並べた、二進数の順序付け方式です。デジタル回路やエンコーダなど、誤読を防ぎたい場面で活用されていることで知られています。 グレイコードの一例は次の通りです。[0, 1, 11, 10, 110, 111, …] 問題の定義 ある数 n が与えられたとき、n 番目のグレイコードを求めることを考えます。 例: 入力が n = 12 の場合、出力は 10 になります。これは、12 を二進数で表すと (1100) であり、それに対応するグレイコードは (1010)、その十