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

c言語で%を使わない余りの出し方の問題を出されたのですが、色々考えたのですが全くわかりません
まず余りの限界(余りがどこまであるか)がどこまであるか。
そしてwhileかforを使って余りを出す方法を自分で考えたのですが全くできませんでした。

自分の中ではif文でaを余りとして(a==1 && a==2)など考えたりしました。
またこれはポインタも使わずavgr**なども使いません。

さらに発展した問題で
if文、switch文、for文、while文を使わないで余りを出すというのが出てきました

情けないのですが、何かアドバイスがあれば教えていただきたいと思います

A 回答 (9件)

割られる数を割る数で引いていって、割る数よりも小さくなったら、


それが余りでしょ。

この回答への補足

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

補足日時:2012/05/25 14:54
    • good
    • 2
この回答へのお礼

for文も無事できました。
for(i=0;i<=x;i++){
c = ( a / b ) * b;
c = i - c;
}
printf("amari = %d\n",c);

色々と誤解を招き失礼しました。
No.1とNo.2がわかりやすかったのでベストアンサーにさせていただきます!

お礼日時:2012/05/25 15:16

整数系の変数の割り算ならば商は剰余を含まない整数になることを理解出来れば解るはず。




// a ÷ b の剰余をzとする。 a,bはどこかでセットされているものとする。

int x,,y,z

x = a / b;
y = x * b;
z = a - y;

z = a - (a/b) * b; // でも可能なはずだが処理系によってはうまく行かない可能性が有る。
    • good
    • 3

計算での出し方は出ているから、別な方法。


2の倍数限定で、andで出せますね。

int base = 127;
int amari = base & (32-1);

これは、127を32で割った場合で、マスク値を割る数-1にすることです。

この回答への補足

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

補足日時:2012/05/25 14:50
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/05/25 14:50

#6です。



else内の式が間違っていました。申し訳ございません。
    • good
    • 0

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

この回答への補足

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

補足日時:2012/05/25 14:45
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/05/25 15:15

一番安直なのは、div関数を使う方法です。



int a = 10, b = 3;
div_t d = div(a, b);
int rem = d.rem; /* 余り */

long型ならldivを、long long型ならlldivを使ってください。
double型ならfmodを使ってください。

この回答への補足

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

補足日時:2012/05/25 12:56
    • good
    • 0

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

この回答への補足

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

補足日時:2012/05/25 14:15
    • good
    • 0

C言語というより算数の問題ですけど。


「余り」とは何なのか思い出してみてください。

この回答への補足

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

補足日時:2012/05/25 12:58
    • good
    • 1

もう一つ、


整数なら割り算して、割った数を掛け算して、元の値との差が余りです。
    • good
    • 2
この回答へのお礼

色々試行錯誤したらできました!
一応コードとしては
scanf("%d",&a);
scanf("%d",&b);

c = (a / b ) * b;
c = a - z;

でできました。
for文のほうもno.1を参考にしてみます。

お礼日時:2012/05/25 14:59

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