【C言語パズル】算術演算・関数なしで2つの数値を連結する方法
C言語パズル:2つの数値を1つに連結せよ
今回のC言語パズルのテーマは「2つの数値を結合する」ことです。ただし、算術演算、文字列操作、その他のライブラリ関数は一切使用できません。
課題の条件は以下のとおりです。
入力 : 12 , 54 出力 : 1254
この一見シンプルながら制約が厳しい問題に対する最適解は、プリプロセッサのトークン連結演算子(##)を使ったマクロを定義することです。
トークン連結演算子(##)とは?
## 演算子は「トークンペースティング演算子」とも呼ばれ、マクロに渡された2つのトークンを1つのトークンとして連結する機能を持っています。この演算子を利用してマクロを定義すれば、数値同士を簡単につなげた値を得ることができます。
パズルを解くCプログラム
#include <stdio.h>
#define merge(a, b) b##a
int main(void) {
printf("%d ", merge(432 ,23));
return 0;
}
実行結果
23432
このプログラムでは、merge(432, 23) が b##a の定義に従って展開され、第2引数の 23 と第1引数の 432 が連結されて 23432 が出力されます。実行時に関数を呼び出すのではなく、コンパイル前のプリプロセス段階でトークンが結合されるため、算術演算や文字列関数に頼らずに目的を達成できるのがポイントです。
-
C言語で円の面積を計算する方法|公式・アルゴリズム・サンプルコードを解説
円の面積とは? 円とは、閉じた曲線で囲まれた図形のことです。円周上のすべての点は、円の内部にあるある1つの点から等しい距離にあります。この中心となる点を円の中心と呼び、中心から円周上の各点までの距離を半径と呼びます。 面積とは、閉じた図形が占める広がりの大きさを数値で表したものです。したがって、円の面積とは、円の周囲によって囲まれた内側の領域の大きさを指します。 円の面積を求める公式 円の面積は、次の公式を使って計算できます。 面積(Area)= π × r × r ここで、r は円の半径、π(パイ)は約3.14という定数です。プログラムでは、半径を入力として受け取り、この公式に当てはめて面
-
C言語でスネークパターン(蛇行順)に行列を出力する方法
n×nサイズの2次元配列が与えられたとき、要素の元の位置を一切変更せずに、スネークパターン(蛇行する順序)で配列の要素を出力するCプログラムを紹介します。例入力: arr[]= 100 99 98 97 93 94 95 96 92 91 90 89 85 86 87 88 出力: 100 99 98 97 96 95 94 93 92 91 90 89 88 87 86 85このプログラムでは、行列の各行を順番に走査し、その行が偶数行か奇数行かを判定することで処理を切り替えます。偶数行(0行目、2行目など)の場合:その行の要素を左から右へ出力します。奇数行(1行