跳到主要內容

發表文章

C & C++ 字串兩三事

strlen( ) 不算'\0' ,但是會算'\n'。所以strlen("hello") 結果是5,strlen("hello\n") 結果是6。換行符號也算一個char,很容易被遺忘。 宣告string的時候,通常用的格式 char[MAXLINE+1],最後那個1,就是拿來放字串的結尾'\0'的。 從stdin讀字串的方法: cin>>s; 讀一個單字,遇到空格or換行停止,空格or換行不會存進字串s。 cin.getline(s, length) 讀一行,遇到換行才停。 fgets(s, sizeof(s), stdin) 最後那個'\n'也會被包含在輸入字串裡。 cin.getline(s,length)則不會包含'\n'

UVa 100 3n+1

解題策略 很多人的第一題ACM,老老實實按照題目指示做就沒問題。把計算cycle length抽出來作一個獨立的函數的話,程式會清晰很多。 注意 這題有個隱陷阱,就是題目給的a,b值不一定是a小於b,也可能a大於b,十個人裡有九個半都是栽在這裡,請跑跑以下關鍵測資: 1  10 結果應該印出 1 10 20 10  1 結果應該印出 10 1 20

用歸納法證明永遠吃不飽

來貼蔡神的簽名檔XD Proof techniques #1: Proof by Induction. Q: 試用歸納法證明:飯永遠吃不飽. 1. 吃一粒米顯然不會飽 2. 假設吃了 n 粒米沒有飽 再吃一粒米顯然也不會飽, 就是說吃 n+1 粒米也不會飽 由此可推得米飯永遠吃不飽 ! QED. (QED translates from the Latin as "So what?")

十進位轉二進位

目前為止寫過最簡短的版本 #include<iostream> #include<climits> using namespace std; int main(){ int x=0; unsigned int y = INT_MIN; cout << "please enter a Integer:"; cin >> x; while(y!=0){ (x&y)?(cout << "1"):(cout << "0"); y=y>>1; } return 0; } 概念: INT_MIN的二進位長這樣 10000000000000000000000000000000 跟x做bit AND,除了最左邊bit,其他bit都會變0。 只有最左邊bit維持原樣,這時就可以單獨判斷該bit要印出0或1。 接下來將INT_MIN 往右shift一個bit。就可以判斷x第二個bit了,依此類推。