Mathematical Algorithms
Table of Contents
不用除法和求模运算,判断一个数能否被3整除
method1
这个数的每一个位上的数字加起来后,和为3的倍数。每个位相加,然后不断减去3,看结果是不是等于0
bool parse(unsigned int n) { char buffer[1024]; int i,length; int sum = 0; if(n < 10) { if(n == 0 || n == 3 || n == 6 || n == 9) return true; else return false; } sprintf(buffer,"%d",n); length = strlen(buffer); for(i = 0; i != length; i++) sum += buffer[i] - '0'; return parse(sum); }
method2
3 = 0B11 如果a能被3整除,a=b×3,则a的最低位和b的最低位相同,a的次低位=b的次低位 +b的最低位,所以b的次低位=a的次低位-b的最低位,以此求出b。若不能则a不能被3整出
bool divideby3(int n) { int temp; if(n < 0) n = -n; while(n > 0){ temp = n & 1; n >>= 1; n = n - temp; } return (n == 0); }