這次阿倫(學長,法律雙主修資工的罩哥)去台科大面試
被問到了這麼一題:
「如何只用加減乘除,判斷一個數字是不是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; }
全站熱搜
留言列表