• ベストアンサー

C言語で%を使わない余りの出し方

c言語で%を使わない余りの出し方の問題を出されたのですが、色々考えたのですが全くわかりません まず余りの限界(余りがどこまであるか)がどこまであるか。 そしてwhileかforを使って余りを出す方法を自分で考えたのですが全くできませんでした。 自分の中ではif文でaを余りとして(a==1 && a==2)など考えたりしました。 またこれはポインタも使わずavgr**なども使いません。 さらに発展した問題で if文、switch文、for文、while文を使わないで余りを出すというのが出てきました 情けないのですが、何かアドバイスがあれば教えていただきたいと思います

質問者が選んだベストアンサー

  • ベストアンサー
  • yama1718
  • ベストアンサー率41% (670/1618)
回答No.1

割られる数を割る数で引いていって、割る数よりも小さくなったら、 それが余りでしょ。

izupawapuro
質問者

お礼

for文も無事できました。 for(i=0;i<=x;i++){ c = ( a / b ) * b; c = i - c; } printf("amari = %d\n",c); 色々と誤解を招き失礼しました。 No.1とNo.2がわかりやすかったのでベストアンサーにさせていただきます!

izupawapuro
質問者

補足

すいません、割られる数と割る数というのが1/2だとすると割られるのが1でしょうか? 1 割る 2 ですよね

その他の回答 (8)

回答No.9

整数系の変数の割り算ならば商は剰余を含まない整数になることを理解出来れば解るはず。 // 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)
回答No.8

計算での出し方は出ているから、別な方法。 2の倍数限定で、andで出せますね。 int base = 127; int amari = base & (32-1); これは、127を32で割った場合で、マスク値を割る数-1にすることです。

izupawapuro
質問者

お礼

ひとまず余りは出ましたが・・・うーん?

izupawapuro
質問者

補足

baseをaとおいて、amariをz = a & (b-1); とすることで余りがでました。 しかし理屈がよくわからないです・・・

  • _if_
  • ベストアンサー率52% (26/50)
回答No.7

#6です。 else内の式が間違っていました。申し訳ございません。

  • _if_
  • ベストアンサー率52% (26/50)
回答No.6

発展した問題というより、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;  } }

izupawapuro
質問者

お礼

for文の方は参考になりました。 少しまだなぞめいていますが、理解したいと思います。

izupawapuro
質問者

補足

質問に書き忘れがありました。 aとbをscanfで読み込み、a/bをするのです。 今↑のようにやるとどうしても a:11 b:3 だとすると3と出てきます ちなみに上て下は別の事と考えてもよろしいのでしょうか?

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.5

一番安直なのは、div関数を使う方法です。 int a = 10, b = 3; div_t d = div(a, b); int rem = d.rem; /* 余り */ long型ならldivを、long long型ならlldivを使ってください。 double型ならfmodを使ってください。

izupawapuro
質問者

補足

残念ながら関数などは使用しないみたいです。ごめんなさい

  • ulti-star
  • ベストアンサー率41% (186/452)
回答No.4

c=a-整数化切り捨て関数(a/b)*b;

izupawapuro
質問者

補足

切捨て関数とは・・・? おそらく関数は使わないです。ライブラリのほうからひっぱるということはこの問題ではないと思います。

  • wormhole
  • ベストアンサー率28% (1621/5656)
回答No.3

C言語というより算数の問題ですけど。 「余り」とは何なのか思い出してみてください。

izupawapuro
質問者

補足

算数ですね。余りがなぜ出るかはわかるんですが…

  • yama1718
  • ベストアンサー率41% (670/1618)
回答No.2

もう一つ、 整数なら割り算して、割った数を掛け算して、元の値との差が余りです。

izupawapuro
質問者

お礼

色々試行錯誤したらできました! 一応コードとしては 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、配列、それらを使った計算問題などです。 よろしくお願いします。

  • c言語プログラミングでの質問?です。

    学校でc言語プログラミングを使って簡単なゲームを作りなさい。 という課題が出ました。 下記の条件に沿って作れとのことです。 なかなかいいアイデアが浮かばないんですが、なにかちょうどいいものないですかね? ・scanf文を使うこと。。 ・if文を使うこと。 ・for文(while文)を使うこと。 ・rand関数を使うこと。 ・自分で定義した関数を使うこと。 ・配列または文字列を使うこと。

  • C言語について

    初心者で学校の課題をやっているときに疑問がでてきてしまったので、基本的な質問なのですが、教えて頂けたらうれしいです。 1.関数にすることによってどんな利点があるのでしょうか。 2.分岐のif文とswitch文は同じ処理をしていると考えていいのでしょうか。 3.switch文の中にfor文や、for文の中にswitch文など、条件式の中に条件式をいれることはできるのでしょうか?? 一度に3つも質問してしまってすみません。 ぜひ回答をおねがいします。

  • C言語のプログラムについて

    C言語のプログラムについて 3桁の自然数の中で、自分自身を含めた約数が奇数になるものがいくつあるかを求めるプログラムを作りたいのですが、swich文を使って、6通りの方法で出そうとしていまして、 while 文、 for文、 do while文に加え、 for文のを、1つの関数として独立させたもの、 さらに、for文のを重ループ部分のそれぞれのループに対応して、2つの関数として独立させたもの、 そして、この2つの関数のどちらともをループを用いずに再帰呼び出しを用いたもの の6通りで出したいのですが、swich文を使うところは自力でできたのですが、あとの6つそれぞれのプログラムの組み方がわかりません。 教えていただけないでしょうか?ややこしい書き方をしてすいません・・・。

  • C言語

    C言語 10進数n(0<n<256)を2進に変換させろ 配列を使うな do-whileでnを入力させることはできましたが、そこから先がわかりません。 for文を使えと言われたのですが……

  • 流れ図からプログラムに直してください!【C言語】

    その流れ図をC言語のプログラムに直してくれませんか? 処理2はscanf(..);って感じの内容です。 入口 処理1 for(処理2; 判断; 処理4){ 処理3 } 出口 って感じかなって思ったんですが、for文の中にscanfの文を入れてもいいのかわからずに悩んでます。 ループ文なのでwhile文、for文、do..while文のどれかかな?って思ったんですが違う気もして、わかるかたいらっしゃいませんか?

  • 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言語でゲームを作りたいんですど・・・

    変数4つ、配列一つ 制御文はif文、switch文、繰り返し制御をそれぞれ1回以上使って、C言語のゲームを作りたいんですけど、まったくわかりません。 どんなソースを作ればいいでしょうか??

専門家に質問してみよう