gpt4 book ai didi

c++ - 长号。分配

转载 作者:行者123 更新时间:2023-11-30 01:30:17 27 4
gpt4 key购买 nike

世界!我有个问题。今天我尝试创建一个代码,它可以找到加泰罗尼亚语号码。但是在我的程序中可以是长数字。我找到了分子和分母。但我不能分割长数字!此外,只有标准库必须在此程序中使用。请帮帮我。这是我的代码

#include <vector>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
const int base = 1000*1000*1000;
vector <int> a, b;
int n, carry = 0;
cin>>n;
a.push_back(n);
for (int ii=n+2; ii!=(2*n)+1;++ii) {
carry = 0;
for (size_t i=0; i<a.size() || carry; ++i) {
if (i == a.size())
a.push_back (0);
long long cur = carry + a[i] * 1ll * ii;
a[i] = int (cur % base);
carry = int (cur / base);
}
}
while (a.size() > 1 && a.back() == 0) a.pop_back();

b.push_back(n);
for (int ii=1; ii!=n+1;++ii) {
carry = 0;
for (size_t i=0; i<b.size() || carry; ++i) {
if (i == b.size())
b.push_back (0);
long long cur = carry + b[i] * 1ll * ii;
b[i] = int (cur % base);
carry = int (cur / base);
}
}
while (b.size() > 1 && b.back() == 0) b.pop_back();

cout<<(a.empty() ? 0 : a.back());
for (int i=(int)a.size()-2; i>=0; --i) cout<<(a[i]);

cout<<" ";

cout<<(b.empty() ? 0 : b.back());
for (int i=(int)b.size()-2; i>=0; --i) cout<<(b[i]);
//system("PAUSE");
cout<<endl;
return 0;
}

附言抱歉我的英语不好 =)

最佳答案

您不必计算 (2n)!为了计算 (2n)!/(n!(n+1)!)),因为你可以使用 this link 中给出的递推关系:

C(0)=1
C(n)=(4n-2)C(n-1)/(n+1)

这仅使用 32 位算术给出了前 15 个项。只需将任意长度的整数乘以和除以 16 位整数,就可以生成多达 16384 个项。这比一般的任意精度算法要容易得多,很可能被设置为家庭作业。

关于c++ - 长号。分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4704773/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com