プロが教えるわが家の防犯対策術!

1から1000万までの数字を入力したときに
その入力した数字のなかに5があった場合には「go」と表示されるようなものです。

#include <iostream>
using namespace std;


から始まるプログラミングで作りたいです。

どのようなソースプログラムを作ったらいいんでしょうか?
MACのパソコンを使っています。

A 回答 (10件)

こんなに豪華な回答陣にこれだけヒントを頂いて、自分のソースについて本当に考えているのか疑問です。

それはともかく、回答例を示します。
#include <iostream>
using namespace std;

int main()
{
  int i;
  cout << "数字を入力してね(1000万まで)--->";
  cin >> i;
  while( i >= 1 ) {
    if( i % 10 == 5 ) {
      cout << "go";
      break;
    }
    i /= 10;
  }
  return 0;
}

本当に15行程度でできてしまいましたね。このソースについての疑問点があれば、また質問してください。
    • good
    • 0

1.数字を文字列(文字ではない)扱いする。


2.
 #include <iostream>
 using namespace std;
 から始まるプログラムにする(他の標準ライブラリとか使わない)
3.if else whileの3つしか使えない
となると
以下の考え方はどうでしょう

文字列の長さを決める=1000万なので8桁ですね
 charで9文字分(\nが入るため1文字分多め)の長さの配列を宣言する
while内でcharのi番目の文字と5(数字ではなく文字(文字列ではない))を比較する
 あれば、goと表示

これで大体15行程度ですね(自分流コーディングで、{だけでも1行とする)

あと、できれば課題などは自分で考えてみる方が良いと思います。
そちらのほうが力が付くと思いますので・・・
    • good
    • 0

No.6 さんの「ある数の上位桁から5があるか」の方法を、「下位桁から5があるか」にしてみました。



例)987654321 の場合

 はじめに、1 をみます( % 10 )。NG
 次に、10 で割った 98765432 の 2 をみます。NG
 次に、10 で割った 9876543 の 3 をみます。NG
 次に、10 で割った 987654 の 4 をみます。NG
 次に、10 で割った 98765 の 5 をみます。go  break

 こうすることで、
 質問者様のソース(重大な思い違い★がありますが・・)

>if (i % 10000000 ==5 || i % 1000000 ==5 || i % 100000 ==5 || i %10000 == 5 || i % 1000 ==5 || i % 100 == 5 || i % 10 ==5 || i % 1 ==5){

 のように、たくさん書き並べる必要はありません。うしろから2番目 i % 10 == 5 だけで済みます。

★:i が 987654321 の場合「 i % 10000000 」は、7654321 ですよ。

ちなみに、++ でのプログラムは初めてで、using・・・ とか cout とかの用法?に誤りがありましたらご勘弁を・・。
ただし、動作確認はしています。

脱線
「実行(表示?)」にえらい時間が・・、目的の 1/10 の 1000000 までに77秒も要してしまった。

#include <iostream>
using namespace std;

int main()
{
 int i = 1, iWork;

 while( i <= 10000000 ){

  iWork = i;

  cout << i;

  while( iWork ){

   if( 5 == ( iWork % 10 ) ){ // 1の位の数が5か

    cout << "go"; // 「改行」不要

    break;
   }
   iWork /= 10; // 10で割る(=下位桁から)
  }
  cout << "\n"; // まとめて改行

  i++;
 }
 return( 0 );
}
注:インデントに全角空白を用いています。コピペ後、タブに一括変換して下さい。
    • good
    • 0

数字を入力とのことなのでstrstrを使わずに計算で各桁の数値を求める方法を提案してみたのですが


>>教室に通っていて
ということでしたら、どの程度のことを勉強したのかが分からないと
答えはたくさんあるので、求めている回答はなかなかでないんじゃないでしょうか

あと、提案させていただいた方法をうまく使うには
桁数の回数繰り返す、math.hをインクルードしてpow関数を使う
が必要かと思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
教室で習った内容は5の倍数のときにgoという文字が出てくるようにするとこまでしか習っていません。
だから
while if else

くらいしか習ってないんです。
この状況ではどうしたらソースプログラムが作れるでしょうか?

お礼日時:2009/10/20 10:00

OH ノー すんまそ!



うそを言ってしまったので例を挙げよう。

#include <iostream>
using namespace std;

int main(){
int i = 1,dat,wk;
bool flag;

while (i < 10000){
flag = false;

cout << i;

dat = i;
wk = (dat / 10000);
if ( wk == 5) flag = true;
dat = dat - (wk * 10000);
wk = (dat / 1000);
if ( wk == 5) flag = true;
dat = dat - (wk * 1000);
wk = (dat / 100);
if ( wk == 5) flag = true;
dat = dat - (wk * 100);
wk = (dat / 10);
if ( wk == 5) flag = true;
dat = dat - (wk * 10);
wk = (dat / 1);
if ( wk == 5) flag = true;

if (flag){
cout << "go\n" ;
} else {
cout << "\n" ;
}
i++;
}
}
    • good
    • 0

えぇと, たぶん勇み足だと思うけど 853 % 1 は 0 じゃないと困る>#3.


#include <iostream>
int main()
{
char ch;
while (std::cin >> ch) {
if (ch == '5') {
std::cout << "go\n";
}
}
return 0;
}
でいいのでは? 特に悩む必要があるとは思えないのだが.
    • good
    • 0

私が作るならNo,2と同じ方法にします。


No.1さんのお礼に書いてある方法では正しく動きません。
また、動作環境によってはエラーになる時があります。
何故かは書きませんが、良く考えれば判る事です。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
教室に通っていて今まで習った方法でやりたいのでNo,2さんのやりかたではなくもっと単純な方法でやりたいんです。
どうすればいいんでしょうか?

お礼日時:2009/10/19 16:49

お疲れ様です。



「C/C++」のカテゴリがあるのに、なぜそちらで聞かないのだろう?

>>でも僕自身全然知らない文字出てきて理解できません。すいません。
なんで調べようとしないのだろう?

なぜ、#2さんにお礼の言葉がないのだろう?
それでも、自分のプログラムを見てもらいたい場合に「申し訳ありませんが」の言葉がないのだろう?

ひとつだけヒントを出すと[853]という数字があったとする。
(1)853 % 100 = 53
(2)853 % 10 = 3
(3)853 % 1 = 853

どこにも5が出てこない。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
たしかに礼儀に問題ありましたね。すいません。

そして本題ですが、結局考えてもわからないんです。
どう考えればいいのかもいまいちわかりません。

お礼日時:2009/10/19 17:04

こんにちは。



#include <cstdio>
#include <cstring>

char str[9];
sprintf(str,"%d",i);
if(strstr(str,"5") != NULL){
cout << "go:" << i << endl;
}
こんなのはどうでしょう?
iが入力ね。
    • good
    • 0
この回答へのお礼

ありがとうございます。
でも僕自身全然知らない文字出てきて理解できません。すいません。
No,1さんの回答のお礼に試しに自分が作ったのがあるんですが、そちらをチェックしてもらえませんか?

お礼日時:2009/10/19 16:11

単純な考え方だと


例:87,654,321が入力されたら
87654321/10000000%10 = 8.7654321
87654321/1000000%10 = 7.654321
87654321/100000%10 = 6.54321
以下略
これ(8.7654321など)をintに入れれば小数点以下は切り捨てされて各桁の数が求められます
あとはifで5だったら~~とすればいいんじゃないでしょうか

※10のn乗を繰り返しを使って表現する場合はmath.hをインクルードするとできます
    • good
    • 0
この回答へのお礼

ありがとうございます。
回答の内容を読んで自分なりにやってみました。
申し訳ないんですけどこれでいいのか確認していただけますか?

#include <iostream>
using namespace std;

main(){
int i = 1;
while (i < 10000000){
cout << i;
if (i % 10000000 ==5 || i % 1000000 ==5 || i % 100000 ==5 || i %10000 == 5 || i % 1000 ==5 || i % 100 == 5 || i % 10 ==5 || i % 1 ==5){
cout << "go/n" ;
} else {
cout << "/n" ;
}
i++;
}
}

お礼日時:2009/10/19 15:44

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