- ベストアンサー
C言語で%を使わない余りの出し方
c言語で%を使わない余りの出し方の問題を出されたのですが、色々考えたのですが全くわかりません まず余りの限界(余りがどこまであるか)がどこまであるか。 そしてwhileかforを使って余りを出す方法を自分で考えたのですが全くできませんでした。 自分の中ではif文でaを余りとして(a==1 && a==2)など考えたりしました。 またこれはポインタも使わずavgr**なども使いません。 さらに発展した問題で if文、switch文、for文、while文を使わないで余りを出すというのが出てきました 情けないのですが、何かアドバイスがあれば教えていただきたいと思います
- izupawapuro
- お礼率55% (71/128)
- C・C++・C#
- 回答数9
- ありがとう数4
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
割られる数を割る数で引いていって、割る数よりも小さくなったら、 それが余りでしょ。
その他の回答 (8)
- TooManyBugs
- ベストアンサー率27% (1472/5321)
整数系の変数の割り算ならば商は剰余を含まない整数になることを理解出来れば解るはず。 // a ÷ b の剰余をzとする。 a,bはどこかでセットされているものとする。 int x,,y,z x = a / b; y = x * b; z = a - y; z = a - (a/b) * b; // でも可能なはずだが処理系によってはうまく行かない可能性が有る。
- unacyo
- ベストアンサー率51% (35/68)
計算での出し方は出ているから、別な方法。 2の倍数限定で、andで出せますね。 int base = 127; int amari = base & (32-1); これは、127を32で割った場合で、マスク値を割る数-1にすることです。
お礼
ひとまず余りは出ましたが・・・うーん?
補足
baseをaとおいて、amariをz = a & (b-1); とすることで余りがでました。 しかし理屈がよくわからないです・・・
- _if_
- ベストアンサー率52% (26/50)
#6です。 else内の式が間違っていました。申し訳ございません。
- _if_
- ベストアンサー率52% (26/50)
発展した問題というより、ifなどを使わないほうが基本ですね。他の皆様のご回答の通りです。 逆にそれぞれを使った場合は、 // if (switch) if( x / y == 0 ) z = 0; else z = x - x / y; // for (while) for(int i = 0; i < x; i++ ) { if( ( x - i ) / y == 0 ) { z = i; break; } }
お礼
for文の方は参考になりました。 少しまだなぞめいていますが、理解したいと思います。
補足
質問に書き忘れがありました。 aとbをscanfで読み込み、a/bをするのです。 今↑のようにやるとどうしても a:11 b:3 だとすると3と出てきます ちなみに上て下は別の事と考えてもよろしいのでしょうか?
- jacta
- ベストアンサー率26% (845/3158)
一番安直なのは、div関数を使う方法です。 int a = 10, b = 3; div_t d = div(a, b); int rem = d.rem; /* 余り */ long型ならldivを、long long型ならlldivを使ってください。 double型ならfmodを使ってください。
補足
残念ながら関数などは使用しないみたいです。ごめんなさい
- ulti-star
- ベストアンサー率41% (186/452)
c=a-整数化切り捨て関数(a/b)*b;
補足
切捨て関数とは・・・? おそらく関数は使わないです。ライブラリのほうからひっぱるということはこの問題ではないと思います。
- wormhole
- ベストアンサー率28% (1621/5656)
C言語というより算数の問題ですけど。 「余り」とは何なのか思い出してみてください。
補足
算数ですね。余りがなぜ出るかはわかるんですが…
- yama1718
- ベストアンサー率41% (670/1618)
もう一つ、 整数なら割り算して、割った数を掛け算して、元の値との差が余りです。
お礼
色々試行錯誤したらできました! 一応コードとしては scanf("%d",&a); scanf("%d",&b); c = (a / b ) * b; c = a - z; でできました。 for文のほうもno.1を参考にしてみます。
関連するQ&A
- C言語について質問です。
C言語について質問です。 問題:繰り返し命令と階乗の計算 カウンタ用変数nの値を1から10まで1ずつ変化させて、その値を階乗用変数Kiに順次、掛け算していき、10の階乗を求めよ。 ki=1×2×3×4×5×6・・・・・×9×10 <==10! また、1/n!は小数点以下10桁まで求めよ。 実行結果は n n! 1/n! 1 1 1、0000000000 2 2 0、5000000000 3 6 0、1666666667 4 24 0、0416666667 5 120 0、0083333333 6 720 0、0013888889 7 5040 0、0001984127 8 40320 0、0000248016 9 362880 0、0000027557 10 3628800 0、0000002756 続行するには何かキーを押してください、、、、、、 上のように実行結果が出るようにプログラミングしたいのですがわからないので 分かる方よろしくお願いします。 ちなみに今まで習ってきたのは、if文、switch文、do文、while文、for文なんですがこのプログラミングは、for文でおねがいします。 長文失礼しました。
- 締切済み
- 高校
- C言語の基礎の基本的な問題と解答が載っているサイトを教えてください。
C言語の基礎の基本的な問題と解答が載っているサイトを教えてください。 具体的には、最初から、printf、scanf、if、for、while、do-while、break、continue、switch-case、配列、それらを使った計算問題などです。 よろしくお願いします。
- ベストアンサー
- その他(インターネット・Webサービス)
- c言語プログラミングでの質問?です。
学校でc言語プログラミングを使って簡単なゲームを作りなさい。 という課題が出ました。 下記の条件に沿って作れとのことです。 なかなかいいアイデアが浮かばないんですが、なにかちょうどいいものないですかね? ・scanf文を使うこと。。 ・if文を使うこと。 ・for文(while文)を使うこと。 ・rand関数を使うこと。 ・自分で定義した関数を使うこと。 ・配列または文字列を使うこと。
- ベストアンサー
- C・C++・C#
- C言語のプログラムについて
C言語のプログラムについて 3桁の自然数の中で、自分自身を含めた約数が奇数になるものがいくつあるかを求めるプログラムを作りたいのですが、swich文を使って、6通りの方法で出そうとしていまして、 while 文、 for文、 do while文に加え、 for文のを、1つの関数として独立させたもの、 さらに、for文のを重ループ部分のそれぞれのループに対応して、2つの関数として独立させたもの、 そして、この2つの関数のどちらともをループを用いずに再帰呼び出しを用いたもの の6通りで出したいのですが、swich文を使うところは自力でできたのですが、あとの6つそれぞれのプログラムの組み方がわかりません。 教えていただけないでしょうか?ややこしい書き方をしてすいません・・・。
- 締切済み
- C・C++・C#
- 流れ図からプログラムに直してください!【C言語】
その流れ図をC言語のプログラムに直してくれませんか? 処理2はscanf(..);って感じの内容です。 入口 処理1 for(処理2; 判断; 処理4){ 処理3 } 出口 って感じかなって思ったんですが、for文の中にscanfの文を入れてもいいのかわからずに悩んでます。 ループ文なのでwhile文、for文、do..while文のどれかかな?って思ったんですが違う気もして、わかるかたいらっしゃいませんか?
- 締切済み
- C・C++・C#
- C言語について…
C言語についてですが… while文とdo while文はどう違うんですか?プログラムの書き方が違うくらいでしょうか? またwhile文とdo while文のどちらかしか使えない場合、どちらを使いますか?理由もお願いします。
- ベストアンサー
- その他(学問・教育)
- c言語のforの計算で悩んでいます。
c言語のforの計算で悩んでいます。 これの答えがなぜ2000まで表示されるのでしょうか。 if文が意味がないというか、 if(0<a<1000)なので、999まで表示されるのかと思ったのですが。 もっとも後で、aを設定せず if(0<i*2<1000)とやればいいのではないかと気付きましたが。 既出でしたらすみません。
- ベストアンサー
- C・C++・C#
- C言語でゲームを作りたいんですど・・・
変数4つ、配列一つ 制御文はif文、switch文、繰り返し制御をそれぞれ1回以上使って、C言語のゲームを作りたいんですけど、まったくわかりません。 どんなソースを作ればいいでしょうか??
- 締切済み
- その他(ゲーム)
お礼
for文も無事できました。 for(i=0;i<=x;i++){ c = ( a / b ) * b; c = i - c; } printf("amari = %d\n",c); 色々と誤解を招き失礼しました。 No.1とNo.2がわかりやすかったのでベストアンサーにさせていただきます!
補足
すいません、割られる数と割る数というのが1/2だとすると割られるのが1でしょうか? 1 割る 2 ですよね