這次阿倫(學長,法律雙主修資工的罩哥)去台科大面試

被問到了這麼一題:

「如何只用加減乘除,判斷一個數字是不是3的倍數?」

也就是不能有取餘數(mod)的意思

 

想了一下

一開始我是想......那就把數字一直減一直減

如果減到後來出現0的話,那就是3的倍數了

如果減到後來出現負數的話,那就不是3的倍數了

 

不過

給的數字也會有負數的

所以一直減的方法沒有用

 

恩...其實如果一開始判定數字是正數、負數、0的話

其實可以解決上面的問題啦

可是感覺沒那麼漂亮

所以我就想到了下面這個方法

 

先將數字(n)除以3,然後取其整數的部分(a)

如果數字(n)是3的倍數的話,那a*3應該要等於n

反之,如果不是,那表示說a*3跟n還有1~2的差

實作起來就像這樣吧:

 

(C語言)

#include <stdio.h>
#include <stdlib.h>

int main() {
    int n, a;

    printf("Please input a number: ");
    scanf("%d", &n);

    a = n/3;
    if(a*3 == n)
        printf("%d is a multiple of 3 ", n);
    else
        printf("%d isn't a multiple of 3 ", n);

    return 0;
}

 

YiPo提出了: n/3*3 == n

好強!!!

恩~因為n/3的時候,n跟3都是整數

所以運算之後的結果也還是整數,會把小數部分捨去

 

話說回來

這樣子的東西可以很簡單的拿去判斷是不是2的倍數3的倍數、4的倍數....(以此類推)~

#include <stdio.h>
#include <stdlib.h>

int main() {
    int n = 0;
    
    printf("Please in put a number: ");
    scanf("%d", &n);
    
    if(n/3*3 == n) {
        printf("%d is a multiple of 3 ", n);
    }
    else {
        printf("%d isn't a multiple of 3 ", n);
    }
    
    system("pause");
    return 0;
}
arrow
arrow
    全站熱搜

    方格子 發表在 痞客邦 留言(3) 人氣()