C語言強(qiáng)化(十)求 1+2+…+n | 要求:不使用關(guān)鍵字
來源:程序員人生 發(fā)布時(shí)間:2015-06-09 08:44:51 閱讀次數(shù):3252次
大家51節(jié)快樂啦!勞動(dòng)光榮!
1大早起來刷刷算法題,腦力勞動(dòng)勞動(dòng),結(jié)果就發(fā)現(xiàn)了這么道神題~
通過這道題,你可以學(xué)會(huì):
- 用自己的語言去實(shí)現(xiàn)高級(jí)語言提供的快捷工具
題目:求 1+2+…+n,
要求不能使用乘除法、 for、 while、 if、 else、 switch、 case 等關(guān)鍵字和條件判斷語句(A?B:C)
我了個(gè)去。。不能使用關(guān)鍵字,那不是自廢武功嗎??
淡定淡定~~想一想,當(dāng)我們使用for、while的時(shí)候,高級(jí)語言都做了些甚么,他們那邊的世界可沒有for和while。
所以,for、while循環(huán)語句只是高級(jí)語言給用戶提供的循環(huán)方式,我們完全可以自己做1個(gè)循環(huán)器出來!
思路
創(chuàng)建1個(gè)結(jié)構(gòu)體(類),在其構(gòu)造函數(shù)中對(duì)數(shù)字加1,
然后創(chuàng)建1個(gè)大小為N的該結(jié)構(gòu)體類型的數(shù)組,
自然就會(huì)調(diào)用N次構(gòu)造函數(shù),也就實(shí)現(xiàn)了從1加到N
下面是我們自己設(shè)計(jì)的循環(huán)器的構(gòu)造函數(shù)的代碼
Temp()
{
++N;
Sum += N;
}
非常簡(jiǎn)單的代碼實(shí)現(xiàn),每次調(diào)用時(shí)都會(huì)履行代碼塊內(nèi)的語句,
其實(shí)就相當(dāng)于把for(int i = 1;i<n;i++){xxx}中的,xxx和i++放在我們自己設(shè)計(jì)的循環(huán)器的構(gòu)造函數(shù)中。
源代碼
#include <stdio.h>
#include<stdlib.h>
#include <iostream>
#include<sstream>
#include <vector>
using namespace std;
/**
題目:求 1+2+…+n,
要求不能使用乘除法、 for、 while、 if、 else、 switch、 case 等關(guān)鍵字和條件判斷語句(A?B:C)。
思路
for、while循環(huán)語句只是高級(jí)語言給用戶提供的循環(huán)方式,
我們完全可以自己做1個(gè)循環(huán)器出來。
方法:
創(chuàng)建1個(gè)結(jié)構(gòu)體(類),在其構(gòu)造函數(shù)中對(duì)數(shù)字加1,
然后創(chuàng)建1個(gè)大小為N的該結(jié)構(gòu)體類型的數(shù)組,
自然就會(huì)調(diào)用N次構(gòu)造函數(shù),也就實(shí)現(xià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;
};
//靜態(tài)變量初始化
int Temp::N = 0;
int Temp::Sum = 0;
int solution1_Sum(int n)
{
Temp::Reset();
Temp *a = new Temp[n]; //new 出 n 個(gè)數(shù)組。
//燒毀對(duì)象,釋放內(nèi)存
delete []a;
a = 0;
return Temp::GetSum();
}
void main()
{
cout<<solution1_Sum(100)<<endl;
system("pause");
}
運(yùn)行圖

怎樣,是否是被這道神題洗腦啦,勞動(dòng)節(jié)快樂!
總結(jié):
有時(shí)候我們可以自己寫代碼去實(shí)現(xiàn)高級(jí)語言給我們封裝好的工具。
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)