- ベストアンサー
Cの数値の置換について
- C言語の初心者が正数の特定の数字を置換するプログラムを作成する方法についての質問です。
- 配列の使用は禁止で、for文、if文、swich文、do while文などを使用して解決する必要があります。
- 具体的な問題の例として、正数を入力し、その中の特定の数字を他の数字に置換するプログラムを作成する方法を知りたいです。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
大きい数字ではなく、小さい数字で考えて見て下さい。 9876=9*1000+8*100+7*10+6 となるので、8を5に変えるとかにします。 各桁を、x4,x3,x2,x1の変数に置き換えて 9876=x4*1000+x3*100+x2*10+x1 と分解できれば if(x3==8) x3=5; とすればいいわけです。 ではどうやって,x4,x3,x2,x1に分解すればいいのか %演算子を使って下さい x1=9876%10 で9876を10で割った余りが、x1に入ります。 次に9876を10で割った値をint型変数に入れれば 987になるので 同様にx2=987%10、繰り返せば x4=9,x3=8,x2=7,x1=6 となります。 繰り返しと判断だけですので for,if分だけでできることになります。
その他の回答 (4)
- chie65536(@chie65535)
- ベストアンサー率44% (8740/19838)
申し訳ない。 問題文に >正数を入力し って書いてあるから、0は入力させないようにしないといけないね。 すると、ANo.3のプログラムで正解だわ。間違った指摘してごめん。
- chie65536(@chie65535)
- ベストアンサー率44% (8740/19838)
ANo.3さん惜しいっ! Input a positive number. -> 0 Specify the target number. (0 to 9) -> 0 Input a number converting from "5". (0 to 9) -> 5 ってやった時に、 Result: ってなっちゃって、 Result:5 にならない。 「どこがどう悪いのか?どう直せばよいのか?」を考えると勉強になるから、質問者さんは、それを考えてみよう。 なので、あえて、修正方法は回答しません。
補足
それはnum=0の時にif文で再入力するようにすればいいということでしょうか?
- asuncion
- ベストアンサー率33% (2127/6289)
#include <stdio.h> void convert(int num, int s, int d) { if (num) { convert(num / 10, s, d); printf("%d", (num % 10 == s) ? d : num % 10); } } int main(void) { int num, s, d, n; do { printf("Input a positive number.\n-> "); n = scanf("%d", &num); } while (n != 1 || num <= 0); do { printf("Specify the target number. (0 to 9)\n-> "); n = scanf("%d", &s); } while (n != 1 || s < 0 || 9 < s); do { printf("Input a number converting from \"%d\". (0 to 9)\n-> ", s); n = scanf("%d", &d); } while (n != 1 || d < 0 || 9 < d); printf("Result:"); convert(num, s, d); putchar('\n'); return 0; }
お礼
ソースコードを載せて頂きありがとうございます。 これを元にしっかりと自分で考えて見ます。ありがとうございました。
- kmee
- ベストアンサー率55% (1857/3366)
char s[]="abcabcabc" ; とあったとき、cをxに置き換えるプログラムは作れますか? scanfでも文字列入力できます
補足
ありがとうごまざいました。 残念ながらまだ配列の使い方を理解できていないので、文字の置き換えも解くことができません………。
補足
ありがとうございました。考え方がわかったので解いてみたのですが、for文で各桁を出した後にx1,x2・・・に入れる方法がわかりません。その場合はどうしたらよいのでしょうか??