- 締切済み
世界のナベアツ
今C言語のプログラミングを勉強しています。 3の付く数字と3の倍数をアホにさせたいのですが、うまくできません。 3の倍数は%3で余りが0になるようにするのは分かるのですが、3の付く数字(135とか)をどのようにプログラムしたら良いのか分かりません。 ぜひ教えてください。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- bravy
- ベストアンサー率0% (0/2)
3の付く数字というのは、文字列に変換して'3'という文字があるかを先頭からnull文字まで操作すれば良いと思います。 sprintf(buf,"%d",number); for(*p=buf;*p!=0;p++) { if(*p=='3') {あほだ;} } アホじゃない;
- prophetok
- ベストアンサー率44% (13/29)
初心者でも分かりやすく書き直したつもり #include <stdio.h> int isAho( unsigned int a ); void main(void ) { for(int i=1;i<100;i++) { if( isAho( i ) == 1) printf("%dはアホです\n",i); else printf("%dはアホじゃない\n",i); } } int isAho( unsigned int a ) { if(a%3 == 0) return 1; while(a != 0) { if(a%10==3 ) return 1; a/=10; } return 0; }
アホになるか調べたい値が整数だとします。そしてその値が3の倍数か調べた後だとします。 while(値<1){ if文などの制御文で、アホか判断したい値の10の剰余を出します。そうすると、下1桁目の値が抽出できるので、これを3かどうか調べ、3なら制御文の処理で値をアホにしてループを抜けます。 if文終わり アホにしたい値自身を10で割ります。そうすると位が1つくり下がり、溢れた下1桁は無視されます(多分。処理系によって四捨五入かも知れません)。 } ループで使う値は自身を更新(10で割って)してしまうので、アホか調べる部分を関数化して値は引数として渡し、戻り値でアホだったかどうか知らせてもらうといいかも知れません。 実証していないので分かりませんが、これでできるでしょうか?
- prophetok
- ベストアンサー率44% (13/29)
動作確認はしていないけど、こんな感じ BOOL isAho(int a) { if(a%3) { while(a) { if(a%10==3 ) return TRUE; a/=10 } return FALSE; } else return TRUE; }
- Yanch
- ベストアンサー率50% (114/225)
各桁を調べていって、3になっているものがあるかを判定すると良いかと思います。 sprintf を使うと簡単かもしれません。
補足
すいません。まだC言語の勉強を始めたばかりなのでTRUEやreturn FALSEなどの意味が分かりません。 今、分かるのはif、 switch、 whileくらいです。