1 Star 0 Fork 0

神经蛙/HangZhouDianZiUniversityACM

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
大数-字符串形式 1.28 KB
一键复制 编辑 原始数据 按行查看 历史
C8N16O32 提交于 2021-05-18 20:36 . 用于2-3
//字符串加法 & 特殊catalan数 递推法
#define straddmax 1000
void stradd(char*a,char*b) {
//检查长度
int ae = straddmax - 1, be = straddmax - 1;
while (a[ae] == 0)ae--; while (b[be] == 0)be--;
int ce = ae; if (be > ae)ce = be;
//加法
int s = 0, i = ce;
for (i = 0; i <= ce; i++) {
if (i <= ae)s += a[ae - i] - 48;
if (i <= be)s += b[be - i] - 48;
a[ce - i] = 48 + s % 10;
s /= 10;
}
//进位
if (s) { for (i = ce; i >= 0; i--)a[i + 1] = a[i]; a[0] = 49; }
return;
}
void lintsscan(char*p, int plen, struct lint*a) {
//检查长度
int pe = plen - 1, i, sum, muti;
while (p[pe] == 0)pe--;
i = 0; sum = 0; muti = 1;
while (1) {
sum += muti*(p[pe - i] - 48); muti *= 10;
if (i % 8 == 7 || i == pe) {
linta(a, sum, i / 8);
if (i == pe)break;
sum = 0; muti = 1;
}
i++;
}
return;
}
void catafun(int m, int n,struct lint *a) {
//初始化
char **p = new char*[n + 1];
int i, j;
for (i = 0; i <= n; i++) {
p[i] = new char[straddmax];
for (j = 0; j < straddmax; j++)p[i][j] = '\0';
p[i][0] = 48;
}
p[0][0] = 49;
//递推
for (i = 1; i <= m; i++)
for (j = 1; j <= n; j++) {
if (j <= i)stradd(p[j], p[j - 1]);
}
//传值&打印
lintsscan(p[n], straddmax, a);
//回收内存
for (i = 0; i <= n; i++)delete[]p[i];
delete[]p;
return;
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/tj1652045/HangZhouDianZiUniversityACM.git
git@gitee.com:tj1652045/HangZhouDianZiUniversityACM.git
tj1652045
HangZhouDianZiUniversityACM
HangZhouDianZiUniversityACM
main

搜索帮助

23e8dbc6 1850385 7e0993f3 1850385