翼的呢喃
笨蛋光是要認識這個世界就已耗盡腦汁了...

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

被問到了這麼一題:

「如何只用加減乘除,判斷一個數字是不是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;
}
創作者介紹
創作者 方格子 的頭像
方格子

銀質空間

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


留言列表 (3)

發表留言
  • Edison
  • printf("%s\n", (n&0x03==3) ? "multiple" : "not mutiple");
    算犯規嗎 XD
  • 應該算吧,題目是說只能用+-*/

    不過我其實不會用位元運算呢
    用您的計算方法好像會出錯...
    3, 7, 11, 15...
    在這些數字出現multiple...

    方格子 於 2010/12/07 10:32 回覆

  • 我是路人乙
  • 用你的算法一旦出現小數位自動捨棄的
    後面出來的會跟N不同數字
    例如7/3=2.333之後int會自動捨棄小數點
    那3*2...不就變6了嗎=.=
  • 條件是這個: n/3*3 == n
    所以 7/3*3 = 6 不等於 7, 不是 3 的倍數喔!

    方格子 於 2016/07/04 22:13 回覆