一天,wm和zyf想比比誰比較正氣,但正氣這種東西沒法量化難以比較,爲此,他們想出了一個方法,兩人各寫一個數字,而後轉化爲二進制,誰的數字中二進制1多誰就比較正氣!ios
題目分析:算法
因爲a,b是很是大的長整數,所以須要長整數算法,對於一個整數來講,求其二進制中1的個數就是 模2,而後再除2,直到這個數變爲0 ,看看模2的過程當中出現了幾回1。那麼對於長整數也是這樣的,由於長度範圍是100位,若是咱們用一個數組,每一個數組項標示5位,這樣能夠減小進位的計算。具體代碼以下數組
1 #include <iostream> 2 #include <string.h> 3 #include <stdlib.h> 4 using namespace std; 5 6 7 int com(char * str) 8 { 9 int res = 0 ; 10 int i , j , k , l ; 11 l = 0 ; 12 unsigned int tmp[30]; 13 for(i = strlen(str); i > 0 ; i -= 5){ 14 j = i - 5; 15 k = j > 0 ? j:0 ; 16 const char * nump = (str+k); 17 tmp[l++] = atoi(nump); 18 str[k] = '\0'; 19 } 20 unsigned int num[30]; 21 for(i = 0 ; i < l ; i++){ 22 num[i] = tmp[l-i-1] ; 23 } 24 25 for(i = 0 ; num[l-1] != 0 || i < l-1;){ 26 k = 0 ; 27 for(j = i ; j < l ; j++){ 28 num[j] = (k*100000) + num[j] ; 29 k = num[j]%2 ; 30 num[j] /= 2 ; 31 } 32 if(k){ 33 res++; 34 } 35 while(num[i] == 0){ 36 i++ ; 37 } 38 } 39 return res; 40 } 41 42 int main() 43 { 44 string wm ; 45 string zyf ; 46 while(cin >> wm >> zyf){ 47 int wm1 = com((char *)wm.c_str()); 48 int zyf1 = com((char *)zyf.c_str()); 49 if(wm1>zyf1){ 50 cout << "wm" << endl; 51 }else if(wm1<zyf1){ 52 cout << "zyf" << endl ; 53 }else{ 54 cout << "neither" << endl ; 55 } 56 } 57 return 0 ; 58 }