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

3のつく数と3の倍数を表示させるプログラムを教えてください。
表示させる数字の上限は入力します。
制限:再帰、break文、goto文は使ってはいけない。
解き方かソースを教えてください。

質問者からの補足コメント

  • 制限:文字列として変数や入力した数を扱ってはいけない

      補足日時:2019/12/30 10:01
  • つらい・・・

    制限:bool型、フラグを使ってはいけない

      補足日時:2019/12/30 11:41

A 回答 (3件)

3の倍数は良いとして、各桁が3かどうかの判定は面倒だなぁ。


桁数求めてループさせて各桁が3かどうかで判定、みたいな感じ? プログラミング的には文字列的にやったほうがスマートなんだけどね。

いっそ2進数か3進数表示にして3の倍数だけで済ますとかw
    • good
    • 0

意地悪な課題ですね


30がある場合
if ((n/10)\10==3)
300がある場合
if ((n/100)\100==3)
3000がある場合
if ((n/1000)\1000==3)

となります

elseの中をいかにすれば行けるかも

int k=log10(n)+1; /*桁数を得る*/
int l=2; /* 一桁である場合3で絶対に3の倍数 だから2桁以上場合のみWHILEループ*/
bool fnd=false;

while ((l<=k)||(fnd==true)) {
int kt=pow(10,l);
fnd=((n/kt)\kt==3)?true:false;
l++;


}
    • good
    • 0
この回答へのお礼

回答ありがとうございました。bool型も使えないのも(フラグが)忘れてました。

お礼日時:2019/12/30 11:40

これで行けると思う。




#include <stdio.h>
#include <strng.h>

int n=3;
char str [100];
int max=1000; /* 上限+1 */
while(n < max) {
if ((n % 3)==0) {
/*3で割り切れる数 0である場合は誤検出*/

} else {
sprintf(str,"%d",n);
if (strstr(str,"3")!=NULL) {
/*3のつく数字 */
}



}


n++;
}
    • good
    • 0
この回答へのお礼

回答ありがとうございました。これで通りそうですが、文字列として扱うのもダメなのを忘れてました

お礼日時:2019/12/30 10:00

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

このQ&Aを見た人はこんなQ&Aも見ています