分享:
▲
int main() { char words[10]; cout<<"Please input the strings:"; cin>>words; //输入一串字串 for(int i=0;i<strlen(words);i++) {a(words[ i ]); //按照顺序把字串中的每一个字丢进 a 这个函式里 cout<<" "; } system("pause"); return 0; } 主程式其实不困难..大概就这样.. 接下来看 a 这个函式.. int a(char c) { int i=0; i=c; //把丢进来的字元转换成数字..如字元 A 就等于 65..这个查 ASCII 码表就有了.. fib(i); //再把转换后的数字丢到 fib 函式中.. } 这个 fib 函式才是这支程式主要的核心.. 也就是要怎么把数字变成二进位.. 这里用到递回的写法..建议你可以先看一下书中递回的说明.. int fib(int i) { int k; if(!i)return 0; //如果传进来的 i 值是 0 的话..就结束..这个写法的说明请见底下注解一 k=i%2; //k 的值是 i 除 2 取余数..所以如果 i = 2..那 k = 0 fib(i/2); //再把 i/2 的值丢到 fib 函式中运算..自己呼叫自己..这就是递回.. cout<<k; //把刚刚 k 的值印出来.. } 假设 i 的值是 3..那整个 fib 的执行过程如下: fib(3): 因为 i = 3..不等于 0 所以继续往下执行.. k = 3 % 2 = 1 fib(3/2)..无条件舍去.. 所以是 fib(1) 因为 i = 1不等于 0 所以继续往下执行.. k = 1 % 2 = 1 fib(1/2)..无条件舍去.. 所以是 fib(0) 因为 i = 0 所以就结束了..又因为是递回..所以会往回继续执行.. 回到 fib(1)..印出 k 的值 = 1 底下没有程式码了..结束.. 回到 fib(3)..印出 k 的值 = 1 所以整个印出的顺序是 11 也就是 3 的二进位码.. 希望这段回文对你有帮助..
注解一: if (!i) 我们知道 if () 括号里如果为 True..就会执行xx动作.. 那我们来看看这段程式码..if(!i)return 0; 如果 i = 0 的话..会发生什么状况.. if (!0) ..0 是 False ..所以加上个 ! 运算子..就反过来..变成 True 了.. 也就是说.. if(!i)return 0; 如果当 i = 0 也就是 False 的时候..就 return 0..
|