演算法搜狗筆試題加減法

dongyu2013發表於2014-04-26
一種計算機,其有如下原子功能:
1、賦值   a=b
2、+1操作,++a; a+1;
3、迴圈,但是隻支援按次數的迴圈   for(變數名){/*迴圈裡面對變數的修改不影響迴圈次數*/}
4、只能處理0和正整數
5、函式呼叫    fun(引數列表)
請用虛擬碼的形式分別在這個計算機上程式設計實現變數的加法、減法、乘法。

fun_add(a , b)
{
}
fun_multi(a , b)
{
}
fun_minus(a , b)
{
}
問題的關鍵在於如何實現自減一操作。
本來讓-1自增n次即可實現n的自減的,但系統偏偏又不支援負數。
  1. fun_add(a , b)  
  2. {  
  3.     result = a;  
  4.     for(b)  
  5.         ++result;  
  6.     return result;  
  7. }  
  8.   
  9. fun_muti(a , b)  
  10. {  
  11.     result = 0;  
  12.     for(b)  
  13.         result = fun_add(result , a);  
  14.     return result;  
  15. }  
  16.   
  17. dec(int n)  
  18. {  
  19.     temp = 0;  
  20.     result = 0;  
  21.     for(n)  
  22.     {  
  23.         result = temp;   //result永遠比temp少1,巧妙地減少了一次自增  
  24.         ++temp;  
  25.     }  
  26.     return result;  
  27. }  
  28. /* 
  29. 上面的dec這段函式程式碼執行後,result的值將變為n-1。注意到這段程式碼在自增時是如何巧妙地延遲了一步的。 
  30. 現在,我們相當於有了自減一的函式dec。實現a-b只需要令a自減b次即可 
  31. */  
  32. fun_minus(a , b)  
  33. {  
  34.     result = a;  
  35.     for(b)  
  36.         result = dec(result);  
  37. }  

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29012686/viewspace-1149843/,如需轉載,請註明出處,否則將追究法律責任。

相關文章