C語言強化(十)求 1+2+…+n | 要求:不使用關鍵字
來源:程序員人生 發布時間:2015-06-09 08:44:51 閱讀次數:3259次
大家51節快樂啦!勞動光榮!
1大早起來刷刷算法題,腦力勞動勞動,結果就發現了這么道神題~
通過這道題,你可以學會:
題目:求 1+2+…+n,
要求不能使用乘除法、 for、 while、 if、 else、 switch、 case 等關鍵字和條件判斷語句(A?B:C)
我了個去。。不能使用關鍵字,那不是自廢武功嗎??
淡定淡定~~想一想,當我們使用for、while的時候,高級語言都做了些甚么,他們那邊的世界可沒有for和while。
所以,for、while循環語句只是高級語言給用戶提供的循環方式,我們完全可以自己做1個循環器出來!
思路
創建1個結構體(類),在其構造函數中對數字加1,
然后創建1個大小為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循環語句只是高級語言給用戶提供的循環方式,
我們完全可以自己做1個循環器出來。
方法:
創建1個結構體(類),在其構造函數中對數字加1,
然后創建1個大小為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");
}
運行圖

怎樣,是否是被這道神題洗腦啦,勞動節快樂!
總結:
有時候我們可以自己寫代碼去實現高級語言給我們封裝好的工具。
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈