求1和2的個數

2022-08-18 11:12:11 字數 1959 閱讀 9009

題目描述:

說明:10^100次方很大,計算機基本型別儲存不了,需要做特別的儲存及加法,下面的**沒有實現,只是實現的怎麼求1和2的個數的邏輯

已經花了我很長時間了,改天有時間再寫個大資料的加法功能

裡面插了個正常計算的方法比對結果

**如下:

#include #include 

#include

#include

/**說明:使用迴圈判斷輸入數的低位到高位

*如輸入234

*先判斷4 -> 得1和2的個數為2

*再判斷3 -> 包括(31,32)(20~29)(10~19)(1,2) 共26個

等於 (3-2+1) + 10^1 + 10^1 + 2

根據當前位是0是1還是2還是其他區別開

*再判斷2 -> ...

* ...

*另外:如果數字是n個9,比如999,的1和2的和為k

* 則(n+1)個9,如9999,所求的和為(9-2)*k + 10^n + 10^n + k**/

//初始化輸入數字串 ,輸入 0<=n<=10^100 ,所以建立乙個128大小的字元陣列儲存

char numstr[128] = ;

//int result[128] = ;    /

/儲存結果

//int nine[128] = ;  

//儲存全部是9的數字的求出的1和2的總和

int re=0; //

儲存結果

int fre=0; //

儲存上一次求和結果

int nine=0; //

儲存全部是9的數字的1和2的總和

int cnum=0; //

當前位右側子串大小

int num=0;                  //

當前位數值

int digit=0;                //

迴圈到當前第幾位

//void big_add();

//大資料加法 未實現

int normal_count(char*);   //

正常計算的方法

void

main()

switch

(num)

else

break

;

case2:

if(digit==0

)else

break

;

default

:

if(digit==0

)else

}/*計算全9以下1和2數字的總和

*/if(digit == 0

)else

//子串大小

cnum += num * (int)pow(10

,digit);

//設定上次求和為本次

fre =re;

}printf(

"\n您輸入的數字共出現1和2的次數為:%d次。\n

",re);

system(

"pause");

}/*使用正常方式計算

求1的個數

給定乙個數字,求其對應的二進位制的1的個數,比如 9,對應的二進位制的個數是1001,則對應的1的個數為2個。面試複習,乙個多月了,從看網易公開課 程式設計正規化 然後稍微翻翻了 premier c 接著看了嚴蔚敏的資料結構,說實話 不怎麼的,看到最後幾章,實在看不下去,就換 演算法導論 了,寫了2...

求乙個數2進製中1的個數

include include int count one bits unsigned int value int i 0 int count 0 for i 0 i return count int main 方法2 進行32次迴圈,把這個數 1,把結果加到計數器,把這個數右移一位,直到退出迴圈。...

求整數中1的個數

public static int bitcount int i int型別是有符號型別的特點,當最高位為1時,表示乙個負值。利用這一特點,通過左移位操作 然後判斷正負值,為負標明該位為1,正值標明該位為0。如下。public static int bitcount int i return cou...