日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)

發(fā)布時(shí)間:2024/4/11 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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

文章目錄

  • 求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等關(guān)鍵字及條件判斷語(yǔ)句(A?B:C)
    • 第一種方法:利用對(duì)象的特性
    • 第二種方法:使用模板函數(shù)
    • 第三種方法:使用虛函數(shù)
    • 第四種方法:使用短路計(jì)算

第一種方法:利用對(duì)象的特性

class assist { public://定義第一個(gè)對(duì)象時(shí)N++, N = 1,sum = 1;//第二個(gè)對(duì)象時(shí),N++, N = 2,sum += N = 1 + 2;//第二個(gè)對(duì)象時(shí),N++, N = 3,sum += N = 1 + 2 + 3;//......assist(){N++;sum += N;}static void reset() //因?yàn)榭赡軙?huì)循環(huán)多組,又因?yàn)镹和sum都是靜態(tài)的,所以每次要進(jìn)行重置{N = 0; sum = 0; }//返回結(jié)果static unsigned int GetSum(){ return sum; }private:static int N;static int sum; };int assist::N = 0; int assist::sum = 0;//設(shè)置一個(gè)靜態(tài)變量N和sum,在構(gòu)造函數(shù)中進(jìn)行累加運(yùn)算; //然后構(gòu)造一個(gè)以輔助類為類型、大小為n的數(shù)組,重復(fù)調(diào)用此構(gòu)造函數(shù)n次來實(shí)現(xiàn)n次的累加運(yùn)算 class Solution { public:int Sum_Solution(int n) {assist::reset();assist * p = new assist[n];delete[]p;p = nullptr;return assist::GetSum();} };

第二種方法:使用模板函數(shù)

//第二種方法:使用模板函數(shù)進(jìn)行編程,相當(dāng)于使用模板實(shí)現(xiàn)遞歸,顯示定義輸入?yún)?shù)為1的模塊,相當(dāng)于遞歸的出口 template <int m> inline int SumTo() {return m + SumTo<m - 1>(); } template <> inline int SumTo<1>() {return 1; }

第三種方法:使用虛函數(shù)

//第三種方法:使用虛函數(shù)class Base { public:virtual int Sum(int n){return 0;} };Base* Array[2];//構(gòu)成多態(tài)class Derived : public Base { public://當(dāng)n大于0時(shí),!!n = 1;當(dāng)n等于0時(shí),!!n 等于0;//當(dāng)結(jié)果!!n = 1時(shí),Array[1]->Sum(n - 1);注意Array[1]存的是派生類的對(duì)象,//相當(dāng)于基類指針指向派生類,在派生類的虛函數(shù)表中找Sum函數(shù),調(diào)用的是派生類的Sum//當(dāng)結(jié)果!!n = 0時(shí),Array[0]->Sum(n - 1);注意Array[0]存的是基類的對(duì)象,//相當(dāng)于基類指針指向基生類,在基類的虛函數(shù)表中找Sum函數(shù),調(diào)用的是基類的Sum//當(dāng)結(jié)果!!n = 0時(shí),基類return 0,是‘遞歸’的出口virtual int Sum(int n) { return Array[!!n]->Sum(n - 1) + n; }}; //使用虛函數(shù)來構(gòu)造遞歸,在基類中定義虛函數(shù)Sum(n)返回0,通過將指針數(shù)組的兩個(gè)元素分別綁定到基類和派生類,其中基類的Sum() //結(jié)束遞歸,!!n來構(gòu)造true(1) false(0)來對(duì)指針數(shù)組進(jìn)行訪問 class Solution { public:int Sum_Solution(int n){Base a;Derived b;Array[0] = &a;Array[1] = &b;return b.Sum(n);} };

第四種方法:使用短路計(jì)算

//第四種方法//使用短路計(jì)算來構(gòu)造遞歸:重點(diǎn)是輸入0的時(shí)候輸出0來結(jié)束遞歸 //缺點(diǎn):遞歸的層數(shù)不能太深<3000//相當(dāng)于也是’遞歸‘ //當(dāng) n = 0時(shí),0 &&(ret += Sum_Solution) 一定等于0,相當(dāng)于遞歸出口 //當(dāng) n > 0時(shí),n &&(ret += Sum_Solution) 結(jié)果與n無關(guān),等于(ret += Sum_Solution(n - 1)),進(jìn)行遞歸 class Solution { public:int Sum_Solution(int n) {int ret = n;n && (ret += Sum_Solution(n - 1));return ret;} };

總結(jié)

以上是生活随笔為你收集整理的求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。