最近我问了一个问题,但是关于递归导致了这个问题

注意-> count()函数返回键K在地图容器中的出现次数。如果密钥存在于容器中,则返回1,因为映射仅包含唯一密钥。如果键在地图容器中不存在,则返回0。
它几乎通过了所有测试用例,但未通过1 000 000 000
根据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;
        }

    }

最佳答案

首先,这很糟糕:#include<bits/stdc++.h>
如果需要地图,请使用:

#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;
    }

}

关于c++ - map(long long int,long long int)不适用于key = 1000000000(在long long int范围内),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54088801/

10-12 14:33