題目描述:
說明: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...