# 矩阵 III
## 题目背景
usqwedf 改编系列题。
## 题目描述
给定一个 $n\times m$ 的矩阵,问从左上角走到右下角有多少条路径,保留 $17$ 位有效数字(也就是从第 $18$ 位有效数字以后均输出 $0$)。
## 输入格式
一行两个正整数 $n,m$。
## 输出格式
路径数目 $t$。
## 样例 #1
### 样例输入 #1
```
6 4
```
### 样例输出 #1
```
210
```
## 提示
$1\le n\le 10^8,1\le m\le 4$。
当m=1时,{ans}=2,3,4,5,……n+1;
即ans=n+1;
当m=2时,{ans}=3,6,10,15,……(n+1)* (n+2)/2;
即ans=(n+1)* (n+2)/2;
当m=3时,{ans}=4,10,20,35……(n+1)* (n+2)* (n+3)/6;
即ans=(n+1)* (n+2)* (n+3)/6;
当m=4时,{ans}=5,15,35,70……(n+1)* (n+2)* (n+3)* (n+4)/24;
即ans=(n+1)* (n+2)* (n+3)* (n+4)/24;
对于大数可以用long double存数,然后while(ans>=1e17)就÷10,
- while(ans>=1e17)
- {
- ans/=10;
- }
这样就有了前17位。再同时开一个计数器t(int就行)记录÷的次数,也就是末尾的0的个数
- while(ans>=1e17)
- {
- ans/=10,t++;
- }
拼接输出就行
- printf("%0.Lf",ans);
- for(int i=1;i<=t;i++)
- {
- printf("0");
- }
- #include
- using namespace std;
- long double n,m;
- int t;
- int main()
- {
- cin>>n>>m;
- if(m==1)
- {
- n=n+1;
- }
- else if(m==2)
- {
- n=(n+1)*(n+2)/2;
- }
- else if(m==3)
- {
- n=(n+1)*(n+2)*(n+3)/6;
- }
- else
- {
- n=(n+1)*(n+2)*(n+3)*(n+4)/24;
- }
- while(n>=1e17)
- {
- n/=10;
- t++;
- }
- printf("%.0Lf",n);
- for(int i=1; i<=t; i++)
- {
- printf("0");
- }
- return 0;
- }
感谢阅读!