-3

A = 15、B = 6 と入力すると、答えは 18 になります。どのようなアルゴリズムが必要ですか?

これは私が試していることですが、うまくいきません:

#include <stdio.h>

int main() {
int a, b;

scanf("%d %d", &a, &b);

for (  ; a % b != 0; a++ ) {
    if ( a % b == 0 ) {
        printf("%d\n", a);
        return a;
    }
}
return 0;
}

無限ループしてしまいます。

4

4 に答える 4

2

質問(現在)は次のことを求めています。

a より小さくない b の次の倍数は?

andの表記を使用するab、次のように直接記述できます。

int NextMultipleUp(int a, int b)
{
    int r = a % b;
    if (r == 0)
        return a;
    else
        return a + b - r;
}

もともと求められていた質問

b より大きくない a の次の倍数

そしてそれに対する答えは

int NextMultipleDown(int a, int b)
{
    return b - b % a;
}

これは、元のコメントが適用された答えでした。

于 2012-11-20T10:39:53.200 に答える
1
return (((a-1) / b )+1) * b;

常に b の倍数を返します。元の a よりも大きい倍数を得るために整数被除数をインクリメントします - 元の a から 1 を引きます。

于 2012-11-20T11:18:36.760 に答える
0
int nextMultiple(int a,int b)
{
  if(a%b == 0) return a;
  return a+(b-(a%b));
}

so if a=15 b=6

the ans is

=15+(6-(15%6))
=15+(6-(3))
=15+3
=18
于 2012-11-20T10:58:40.990 に答える
0

反復ループが必要だと思うdo - whileので、別の回答をします。

A より小さくない B の次の倍数を見つける方法は?

明らかに、このコードは David のものより遅いです。

int main ( void ){

    int a, b, c;
    long int result;

    scanf("%d %d", &a, &b);
    c = 0;

    do {
        result = b * c;
        c++;
    } while ( result < a );

    printf( " The number is: %d \n", result );
}
于 2012-11-20T11:00:48.250 に答える