C語言強化(十)求 1+2+…+n | 要求:不使用關鍵字

來源:互聯網
上載者:User

標籤:迴圈   自訂   迴圈器   資料結構   演算法   

大家五一節快樂啦!勞動光榮!

一大早起來刷刷演算法題,腦力勞動勞動,結果就發現了這麼道神題~


通過這道題,你可以學會:

  • 用自己的語言去實現進階語言提供的快捷工具


題目:求 1+2+…+n,
要求不能使用乘除法、 for、 while、 if、 else、 switch、 case 等關鍵字以及條件判斷語句(A?B:C)


我了個去。。不能使用關鍵字,那不是自廢武功嗎??

淡定淡定~~想想,當我們使用for、while的時候,進階語言都做了些什麼,他們那邊的世界可沒有for和while。

所以,for、while迴圈語句只是進階語言給使用者提供的迴圈方式,我們完全可以自己做一個迴圈器出來!


思路
建立一個結構體(類),在其建構函式中對數字加一,
然後建立一個大小為N的該結構體類型的數組,
自然就會調用N次建構函式,也就實現了從1加到N


下面是我們自己設計的迴圈器的建構函式的代碼

Temp(){++N;Sum += N;}

非常簡單的代碼實現,每次調用時都會執行代碼塊內的語句,

其實就相當於把for(int i = 1;i<n;i++){xxx}中的,xxx和i++放在我們自己設計的迴圈器的建構函式中。


原始碼

#include <stdio.h>#include<stdlib.h>#include <iostream>#include<sstream>#include <vector>using namespace std;/**題目:求 1+2+…+n,要求不能使用乘除法、 for、 while、 if、 else、 switch、 case 等關鍵字以及條件判斷語句(A?B:C)。思路for、while迴圈語句只是進階語言給使用者提供的迴圈方式,我們完全可以自己做一個迴圈器出來。方法:建立一個結構體(類),在其建構函式中對數字加一,然後建立一個大小為N的該結構體類型的數組,自然就會調用N次建構函式,也就實現了從1加到N*/class Temp{public:Temp(){++N;Sum += N;}static void Reset() { N = 0; Sum = 0; }static int GetSum() { return Sum; }private:static int N;static int Sum;};//靜態變數初始化int Temp::N = 0;int Temp::Sum = 0;int solution1_Sum(int n){Temp::Reset();Temp *a = new Temp[n]; //new 出 n 個數組。//銷毀對象,釋放記憶體delete []a;a = 0;return Temp::GetSum();}void main(){cout<<solution1_Sum(100)<<endl;system("pause");}

運行圖



怎樣,是不是被這道神題洗腦啦,勞動節快樂!


總結:

有時候我們可以自己寫代碼去實現進階語言給我們封裝好的工具。


C語言強化(十)求 1+2+…+n | 要求:不使用關鍵字

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.