Leetcode的couting bits

来源:互联网 发布:java completefuture 编辑:程序博客网 时间:2024/05/22 13:11
#include<iostream>#include<string>#include<vector>#include <initializer_list>using std::initializer_list;using std::vector;using std::string;using std::cin;using std::cout;using std::endl;vector<int> two(int m){    vector<int> v1; int n;    while (m > 0){        n = m % 2;        m = m / 2;        v1.push_back(n);    }    return v1;}int count(vector<int> v2){    int timesof1 = 0;    for (decltype(v2.size()) i = v2.size(); i != 0; i--){        int c = v2[i - 1];        if (c == 1) timesof1++;    }    return timesof1;}void  digui(int m,vector<int> &v3){    vector<int> v2 = two(m);    int w = count(v2);      v3.push_back(w);     //while (m >= 1){        //m = m - 1;     if (m>=1)    digui(m-1, v3); //cout << m;    //}}int main(){    int m=0;    cin >> m;    vector<int> v4; vector<int> &v5 = v4;       digui(m,v5);        for (decltype(v4.size()) i = v4.size(); i != 0; i--)            cout << v4[i-1];    cout << m;    system("pause");    return 0;}

详见project1
在3000多以内可以运行,但是之后会报错
这里写图片描述
一开始,我以为是超出int表示范围,但是我运行其它人的代码,发现可以运行3000多以上的,证明是我代码问题,但迄今尚未解决,也可能是我超时。
在这次程序,我遇到一个问题,关于while与if区别的
在以下这段代码中

//while (m >= 1){    if (m>=1)    digui(m-1, v3); //cout << m;    //}

我第一次是用while,程序报错,直到我将while改成if.
while是条件为真时,不断循环,if是条件为真,执行一次。
所以我用while时,实际上是陷入一个双层嵌套循环,所以报错。

0 0