-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

问题(现在)要求:

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

使用你的符号aand b,你可以直接写成这样:

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;
}

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

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

总是返回 b 的倍数。增加整数除数以获得大于原始 a 的倍数 - 从原始值中减去一个,因为我们想要“不小于”而不是“大于”a

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

所以如果 a=15 b=6

答案是

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

我认为你想要一个do - while迭代循环,所以我会给出一个替代答案。

如何找到不小于 A 的 B 的下一个倍数?

显然这段代码比大卫的慢。

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 回答