给出两个int数A和B.如何找到不小于A的B的下一个多个?

时间:2012-11-20 10:32:20

标签: c

假设您输入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 个答案:

答案 0 :(得分:2)

问题(现在)要求:

  

b的下一个倍数是不小于?

使用ab的符号,您可以像这样直接编写:

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

最初要求的问题

  

a的下一个倍数不大于b

为此答案是

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

这是原始评论适用的答案。

答案 1 :(得分:1)

return (((a-1) / b )+1) * b;

始终返回b的倍数。增加整数红利以获得比原始红色大的倍数 - 从原始红色减去一个,因为我们希望“不小于”而不是“大于”a

答案 2 :(得分:0)

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

所以如果a = 15 b = 6

ans是

=15+(6-(15%6))
=15+(6-(3))
=15+3
=18

答案 3 :(得分: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 );
}