题目描述
有一n行,m列的棋盘,棋盘左上角有一个过河卒,需要走到右下角点处。卒行走规则:可以向下、或者向右。现在要求你计算出卒从左上角点能够到达右下角点的路径的条数。
输入
一行,为n m。(2≤n,m≤100)
输出
一个整数(路径的条数)。
这是高精度的
有点烦。。。
AC代码:
#include <bits/stdc++.h>
using namespace std;
int n, m;
struct node{
int num[110]; //最低位(个位)存在num[1]
int length;
}ans[110][110];
node operator + (node x, node y)
{
node c;
c.length=max(x.length, y.length);
memset(c.num, 0, sizeof(c.num));
for(int i=1; i<=c.length; ++i){
c.num[i]+=x.num[i]+y.num[i];
if(c.num[i]>=10){
c.num[i+1]+=c.num[i]/10;
c.num[i]%=10;
}
}
if(c.num[c.length+1]){
c.length++;
}
return c;
}
int main()
{
scanf("%d %d", &n, &m);
for(int i=1; i<=n; ++i){
ans[i][1].num[1]=1;
ans[i][1].length=1;
}
for(int i=1; i<=m; ++i){
ans[1][i].num[1]=1;
ans[1][i].length=1;
}
for(int i=2; i<=n; ++i){
for(int j=2; j<=m; ++j){
ans[i][j]=ans[i-1][j]+ans[i][j-1];
}
}
for(int i=ans[n][m].length; i>=1; --i){
printf("%d", ans[n][m].num[i]);
}
return 0;
}
大概就是这样的了