2012-11-20 35 views
-3

假設你輸入A = 15,B = 6,答案是18.我需要什麼算法?給出兩個整數A和B.如何找到B的下一個不小於A的倍數?

這是我嘗試,但它不工作:

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

我得到無限循環。

+0

爲什麼您首先從用戶,然後覆蓋它在循環頭? – unwind

+0

好吧,我剛剛發起了一些價值,對不起 – user1838334

+1

你怎麼能找到一個不大於A的倍數? – iabdalkader

回答

2

的問題(現在)詢問:

B的下一個倍數,是不是比少?

使用您的ab符號,你可以直接寫這樣的:

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

原本要求

的下一個倍數這是個問題不大於b

而對於答案是

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

這對於其應用到原始意見的答覆。

+0

爲什麼要計算A不大於A的倍數?只有A * 1. –

+0

不是'b-b%a = a'? – iabdalkader

+0

@mux no - 嘗試使用b = 5和a = 2。 –

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 
+0

是15%6 = 3?第15/6部分的剩餘部分是5(2,5)嗎? – user1838334

+0

當a是b的倍數時,這將失敗 –

+0

@ user1838334 15%6 == 3 –

0

我認爲你需要一個do - while迭代循環,所以我會給出一個備選答案。

如何找到B的下一個倍數不小於A?

很明顯,這段代碼比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); 
} 
1
return (((a-1)/b)+1) * b; 

始終返回B的倍數。增加整數紅利以獲得大於原始a的倍數 - 從原始值減去1,因爲我們希望'不小於'而不是'大於'a

相關問題