【发布时间】:2021-04-06 07:20:46
【问题描述】:
#include <iostream>
#include <map>
using namespace std;
map<pair<int, int>, int> d;
auto trav(int m, int n) {
if (d.find(make_pair(m, n)) != d.end()) return d[make_pair(m, n)];
if (m == 0 || n == 0) return 0;
if (m == 1 && n == 1) return 1;
d[make_pair(m, n)] = trav(m - 1, n) + trav(m, n - 1);
return d[make_pair(m, n)];
}
int main() {
cout << trav(3, 3) << endl;
cout << long int(trav(18, 18)) << endl;
return 0;
}
我是 C++ 新手,在显示第二个基本情况 trav(18,18) 时出现显示问题,显示的是负数,而不是预期的正长整数正数
【问题讨论】:
-
一切都在您的代码中使用
ints 完成。你只有在溢出已经发生后才转换为long int -
我尝试将传递的值存储在 long int 变量中,但这也没有什么影响
-
将您的地图更改为
map<pair< int, int>, long int> d;,并将相应的返回类型更改为long int trav(...) -
试过了没啥区别
-
你遇到了什么问题?它似乎工作godbolt.org/z/eKx44Y。我得到 o/p 为 2333606220 而不是负数
标签: c++ long-integer display