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


    1 题目描述

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

    2 思路和方法

      (1)递归,不能使用if等条件判断语句,可以使用&&逻辑运算符的短路特性实现。当n=0时,不进行后一个判断的计算,作为递归终止

      (2)利用sizeof(a)计算bool数组的字节数,bool类型在C++中占一个字节。bool a = [n][n+1]; 因一共有n*(n+1)个1,下三角或者上三角,第一行:[1]和为1;第二行:[1][1] 和为2;第三行:[1][1][1]和为3,……。bool类型的数据a,sizeof(a)=n*(n+1),所以1+2+3+...+n=sizeof(a)=n*(n+1)/2,或者是sizeof(a)>>1。

    3 C++核心代码

     1 #include<iostream>
     2 
     3 #include<vector>
     4 
     5 using namespace std;
     6 
     7 class Solution {
     8 public:
     9     int Sum_Solution(int n) {
    10         int sum = n;
    11         sum && (sum += Sum_Solution(n - 1));// 利用前一个判断短路;当n=0时,不进行后一个判断的计算,作为递归终止
    12         return sum;
    13     }
    14 };
    15 
    16 int main()
    17 {
    18     Solution a;
    19 
    20     int res = a.Sum_Solution(5);
    21     cout << "result = " << res << endl;
    22     system("pause");
    23     return 0;
    24 }
    View Code
    1 class Solution {
    2 public:
    3     int Sum_Solution(int n) {
    4         bool a[n][n+1];
    5         return sizeof(a)>>1;
    6     }
    7 };
    View Code

    参考资料

    https://blog.csdn.net/feng_zhiyu/article/details/82112248

  • 相关阅读:
    bootstrap学习9-路径分页和徽章组件
    bootstrap学习8-输入框和导航栏组件
    bootstrap学习7-图标菜单和按钮组件
    bootstrap学习6-辅助类和响应工具
    bootstrap学习5-栅格系统
    bootstrap学习4-表单和图片
    bootstrap学习3-表格和按钮组件
    bootstrap学习笔记2
    相等操作符
    读《JavaScript dom编程艺术(第2版)》笔记 1-2
  • 原文地址:https://www.cnblogs.com/wxwhnu/p/11423776.html
Copyright © 2020-2023  润新知