Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ map(long-long-int,long-long-int)不适用于键=1000 000 000 000(在long-long-int范围内)_C++_Recursion - Fatal编程技术网

C++ map(long-long-int,long-long-int)不适用于键=1000 000 000 000(在long-long-int范围内)

C++ map(long-long-int,long-long-int)不适用于键=1000 000 000 000(在long-long-int范围内),c++,recursion,C++,Recursion,最近我问了一个问题,但是关于引起这个问题的递归 注意->计数该函数返回键K出现在映射容器中的次数。如果容器中存在密钥,则返回1,因为映射仅包含唯一密钥。如果映射容器中不存在密钥,则返回0。 它几乎通过了所有的测试用例,但却失败了100万次 根据long-long-int-range值,它也应该通过这个值,但是它给出了 一些负值作为输出; 我认为这就是容器映射的问题 谁能帮我一下地图怎么了 #include<bits/stdc++.h> using namespace

最近我问了一个问题,但是关于引起这个问题的递归

注意->计数该函数返回键K出现在映射容器中的次数。如果容器中存在密钥,则返回1,因为映射仅包含唯一密钥。如果映射容器中不存在密钥,则返回0。 它几乎通过了所有的测试用例,但却失败了100万次 根据long-long-int-range值,它也应该通过这个值,但是它给出了 一些负值作为输出; 我认为这就是容器映射的问题 谁能帮我一下地图怎么了

    #include<bits/stdc++.h>
    using namespace std;
    map <long long int,long long int> dp;
    int exchange(long long int n){
        if(n<12)
            return n;
        if(dp.count(n))
            return dp[n];
        return dp[n] = exchange(n/2)+exchange(n/3)+exchange(n/4);
    }
    int main(){
     //   int t;
       // cin>>t;
        while(1){
      //      memset(dp,-1,sizeof(dp));
            long long int n;
            cin>>n;
            cout<<exchange(n)<<endl;
        }

    }

问题是函数交换-它返回int,这是比long-long-int更窄的类型。

首先,这是错误的:include 如果需要地图,请使用:

#include <map>
然后对于类型,如果您需要存储超过20亿的内容,请使用您可以确保能够保存的类型,尤其是对于返回类型!:

#include <iostream>
#include <map>

int64_t exchange(std::map& <int64_t, int64_t>, int64_t n){
    if(n<12)
        return n;
    if(dp.count(n))
        return dp[n];
    return dp[n] = exchange(n/2)+exchange(n/3)+exchange(n/4);
}
int main(){
    std::map <int64_t, int64_t> dp;
    while(1){
        int64_t n;
        std::cin>>n;
        std::cout<<exchange(dp, n)<<std::endl;
    }

}

使用find代替count;OT提示:永远不要使用,这是非标准的包含我想这是默认的标题,包含该实践站点中的所有内容是的,这很糟糕: