• ベストアンサー

複数桁10進数の*桁目だけを抽出したい

タイトルがすべてと言えてしまうのですが、 例えば、int宣言された"4287"(この値は変動します)という数値があったとして、1桁目の"7"だけを別の変数へ引き抜きたいのですが、その場合にはANDによるマスク処理による演算で処理可能なのでしょうか? また、他に良い方法などありましたら教えていただけますでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.2

★10進数ですので AND は使えませんね。 ・簡単なサンプルを載せますので読み取って下さい。 サンプル1: int value = 4287; int a[ 4 ]; a[0] = (value % 10); value /= 10; // 1桁目を取り出す a[1] = (value % 10); value /= 10; // 2桁目を取り出す a[2] = (value % 10); value /= 10; // 3桁目を取り出す a[3] = (value % 10); value /= 10; // 4桁目を取り出す サンプル2: int value = 4287; int a; a = (value % 10); value -= a; value → 4280 a → 7 になります。

gouranga
質問者

お礼

丁度、複数行にわたって引き抜きたかったので、サンプル1は大変助かりました。 まだ意味を理解していませんが、繰り返し使っていけば理解できると信じつつ、利用させていただきます!

その他の回答 (2)

回答No.3

  #include <stdio.h> #include <string.h> int PicUp(int n, int d) { char str[16]; sprintf(str, "%d", n); return str[strlen(str) - d] - '0'; } int main(void) { int n, d; scanf("%d %d", &n, &d); printf("%d", PicUp(n, d)); return 0; }  

gouranga
質問者

お礼

手本を書いていただいてありがとうございます。

  • kikanbo
  • ベストアンサー率31% (44/139)
回答No.1

(10をほしい桁数乗した数で割って、int型にしたものに10をかけた数)を10を(ほしい桁数-1)乗した数で割って、int型にしたものから引くといいです。 たぶんこんな感じ

gouranga
質問者

お礼

言っていることは、ANo.2さんとほぼ同じと理解してよいのでしょうか?

関連するQ&A