プロが教える店舗&オフィスのセキュリティ対策術

今C言語のプログラミングを勉強しています。
3の付く数字と3の倍数をアホにさせたいのですが、うまくできません。
3の倍数は%3で余りが0になるようにするのは分かるのですが、3の付く数字(135とか)をどのようにプログラムしたら良いのか分かりません。
ぜひ教えてください。

A 回答 (5件)

各桁を調べていって、3になっているものがあるかを判定すると良いかと思います。



sprintf を使うと簡単かもしれません。
    • good
    • 1

動作確認はしていないけど、こんな感じ



BOOL isAho(int a)
{
if(a%3)
{
while(a)
{
if(a%10==3 )
return TRUE;
a/=10

return FALSE;
}
else
return TRUE;
}

この回答への補足

すいません。まだC言語の勉強を始めたばかりなのでTRUEやreturn FALSEなどの意味が分かりません。
今、分かるのはif、 switch、 whileくらいです。

補足日時:2009/06/27 20:15
    • good
    • 0

 アホになるか調べたい値が整数だとします。

そしてその値が3の倍数か調べた後だとします。
while(値<1){
if文などの制御文で、アホか判断したい値の10の剰余を出します。そうすると、下1桁目の値が抽出できるので、これを3かどうか調べ、3なら制御文の処理で値をアホにしてループを抜けます。
if文終わり
アホにしたい値自身を10で割ります。そうすると位が1つくり下がり、溢れた下1桁は無視されます(多分。処理系によって四捨五入かも知れません)。
}
ループで使う値は自身を更新(10で割って)してしまうので、アホか調べる部分を関数化して値は引数として渡し、戻り値でアホだったかどうか知らせてもらうといいかも知れません。
実証していないので分かりませんが、これでできるでしょうか?
    • good
    • 1

初心者でも分かりやすく書き直したつもり



#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;
}
    • good
    • 1

3の付く数字というのは、文字列に変換して'3'という文字があるかを先頭からnull文字まで操作すれば良いと思います。



sprintf(buf,"%d",number);
for(*p=buf;*p!=0;p++) {
 if(*p=='3') {あほだ;}
}
アホじゃない;
    • good
    • 2

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!