高逐位整除 1468

这道题比较困难

题目描述

高逐位整除数就是从其高位开始,前1位能被1整除, 前2位能被2整除,…,前n位能被n整除。对于指定的正整数n,共有多少个不同的n位高逐位整除数?对于n位高逐位整除数,n是否存在有最大值?

输入描述

多组输入,每组输入一个1-24的正整数,表示要求的高逐位数的位数。

输出描述

对于每组输入,输出对应的高高逐位数,每个数占一行(一组输入可能有多个符合条件胡数)

样例输入

24

1

样例输出

144408645048225636603816

360852885036840078603672

402852168072900828009216

1

2

3

4

5

6

7

8

9

 1 #include<iostream>
 2 using namespace std;
 3 int main(){
 4     int n;
 5     while(cin>>n){
 6         int i,j,k,p=0,s,m[3000][30],t[3000][30],a,b,h;
 7         for(i=1;i<=9;i++){
 8             m[i][1]=i;
 9         }
10         p=9;
11         for(i=2;i<=n;i++){
12             s=0;
13             for(j=1;j<=p;j++){
14                 for(k=0;k<=9;k++){
15                     m[j][i]=k;
16                     a=0;
17                     for(b=1;b<=i;b++){
18                         a=a*10+m[j][b];
19                         a=a%i;
20                     }
21                     if(a==0){
22                         s++;
23                         for(h=1;h<=i;h++){
24                             t[s][h]=m[j][h];
25                         }
26                     }
27                 }
28             }
29             p=s;
30             for(a=1;a<=p;a++){
31                 for(b=1;b<=i;b++){
32                     m[a][b]=t[a][b];
33                 }
34             }
35         }
36         for(i=1;i<=p;i++){
37             for(j=1;j<=n;j++){
38                 cout<<m[i][j];
39             }
40             cout<<endl;
41         }
42     }
43     return 0;
44 } 
转载请标明出处
原文地址:https://www.cnblogs.com/zq-dmhy/p/11084238.html