問題1:選取奇數(shù)個數(shù)的數(shù)字
問題描述:

思路分析:
? ? 原本最開始的想法,我是想用循環(huán)的方法,統(tǒng)計每一個數(shù)字出現(xiàn)的次數(shù)。后來查到一種比較方便的方法,可以采用異或的方法來做。因為只有一個數(shù)字出現(xiàn)奇數(shù)次,其他數(shù)字都是出現(xiàn)偶數(shù)次,兩個相同的數(shù)字異或的結(jié)果是邏輯0,一個邏輯非0的數(shù)字與邏輯0異或等于原來那個邏輯非0的數(shù)字,所以輸入的所有數(shù)字異或之后,最后的結(jié)果就是出現(xiàn)奇數(shù)次的數(shù)字。
代碼如下:

代碼解析:
? ? ?fgets(buff,sizeof(buff),stdin) 意思就是說從標(biāo)準(zhǔn)輸入讀入最多buff個字符,存儲到buff中,由于最后一個讀入的字符是換行符,由于兩個奇數(shù)次出現(xiàn)的字符參與異或的話,最后不會輸出只出現(xiàn)一次的字符,因此,在使用異或運算時,最后不能把換行符參與運算,所以最后的循環(huán)條件中
問題2:平方根
問題描述:

思路分析:
????通過牛頓迭代公式可以求出這道題。
? ? 設(shè)置輸入的數(shù)值為x,定義兩個變量x1,x2,x1初值為1,x2初值為,后面不斷循環(huán)兩步操作:
,直到(x1-x2)的絕對值小于或等于
1e-4。
代碼如下:

問題3:中文讀正整數(shù)
問題描述:

思路分析:
? ? 首先,定義一個char型的字符數(shù)組來接收輸入的數(shù)字。由于輸入的數(shù)組像堆棧一樣,先輸入的數(shù)字被壓在下面,讀出的時候是從棧頂開始讀取,因此,需要把數(shù)組倒置過來。
????其次,判斷零。由于多個“0”連續(xù)在一起的時候,我們也只讀一個零,因此,我們需要定義一個flag來判斷是否有多個“0”。當(dāng)遇見“0”時,我們只執(zhí)行flag為1;當(dāng)遇見非零數(shù)字時,才來判斷flag是否為1,判斷前面是否有“0”,不管前面連著幾個“0,flag是1的話就讀一個零,如果flag不是1,就照常按照其他非零數(shù)字的讀法讀中文。
? ? 最后,由于我們使用fgets()來讀取數(shù)據(jù),fgets()會把我們最后輸入的換行符接收,因此,我們在接收完字符后,要把最后一個換行符替換成結(jié)束符,這樣,在倒置函數(shù)中使用strlen計算字符串長度時,最后一個結(jié)束符就不會被計算進(jìn)來,如果是換行符就會被計算進(jìn)來。
代碼如下:
