小编roa*_*ang的帖子

C++ 中的“Int”乘法与“long long”结果

我试图找到 a 的平方int。我的代码如下所示:

long long sqr=0;
int num=77778;
sqr= num*num;
Run Code Online (Sandbox Code Playgroud)

结果应该是6049417284 但是当我检查输出时它显示1754449988。我在做什么错误? long long应该能够存储结果,但为什么我得到不同的值?

c++ integer-overflow multiplication long-long

9
推荐指数
2
解决办法
9054
查看次数

Leetcode House强盗

我在leet代码上尝试House Robber问题(dp问题).来自用户GYX的这个解决方案看起来简单而优雅.

   int rob(vector<int>& num) {
   int n = num.size();
        if (n==0) return 0;
        vector<int> result(n+1,0);
        result[1] = num[0];
        for (int i=2;i<=n;i++){
            result[i] = max(result[i-1],result[i-2]+num[i-1]);
        }
        return result[n];
   }
Run Code Online (Sandbox Code Playgroud)

但我无法理解逻辑.请帮助我解决逻辑,以及如何处理这样的问题?

algorithm dynamic-programming

5
推荐指数
2
解决办法
2077
查看次数

按位比较

#include <iostream>
using namespace std;

int main() {
    int n, a = 0xfffffff;
    cin >> n;
    while (n--) {
        string s;
        cin >> s;
        int c = 0;
        for (char ch : s)
            c |= 1 << (ch - 'a');
        a &= c;
    }
    cout << __builtin_popcount(a) << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

该代码用于查找字符是否存在于所有输入的字符串中至少一次.有人可以解释这段代码中发生的事情.我试图在C++中学习一些明智的操作,但我无法理解这里发生了什么.

c++ bit-manipulation bitwise-operators

3
推荐指数
1
解决办法
153
查看次数

从n个数字的总和中找到最接近的n

当我得到前n个数字的总和时,我试图求解n的最接近值。这意味着如果我的总和为60,则我的n应该为10,因为前10个数字的总和为55,如果我包括11,则总和为66,超出了我的要求总和。

int num=1, mysum = 0;  
int givensum=60;
while (mysum < givensum) {
    mysum += num;
    num++;
}
cout<<num-1;
return 0;
Run Code Online (Sandbox Code Playgroud)

我可以想到的另一种解决方法是求解二次方程
n(n+1) / 2 = givensum并从中得到n。还有其他解决方法吗?

algorithm logic

1
推荐指数
1
解决办法
867
查看次数