在计算机中,数字是通过像01像素矩阵来显示的,最终的显示效果如下:?
宝儿姐一直在思考一个问题,N!末尾究竟有多少个0?我们假设N!末尾有k个0,请按照规则打印k。?
问题 B: N! 普拉斯时间限制:?1 Sec??内存限制:?128 MB提交:?114??解决:?35 [提交] [状态] [讨论版] [命题人:admin] 题目描述
在处理阶乘时也需要借助计算器。?
在计算机中,数字是通过像01像素矩阵来显示的,最终的显示效果如下:? 宝儿姐一直在思考一个问题,N!末尾究竟有多少个0?我们假设N!末尾有k个0,请按照规则打印k。? 输入
输入一个正整数n(n< 50) ,输入以EOF结尾。
输出
我们假设N!末尾有k个0,请按照规则打印k,数字之间间隔3列0。?
样例输入2
样例输出01110
10001
10011
10101
11001
10001
01110
?大致思路:?1、拿上一题的三维字符数组来用,定义也是一致的!2、看清题意,尾零的个数不超过两位数,其实!可以直接特判输出!3、要求输出时,数字之间间隔3列0,别忘了!4、n不大,可以每次把尾零截出来,然后仅保留后十七位——或许不对吧!2333?? 题解:1 #include<iostream> 2 #include<stdio.h> 3 #include<string.h> 4 #include<string> 5 #include<vector> 6 #include<algorithm> 7 #define ll long long 8 using namespace std; 9 #define N 100 10 11 char s1[100]; 12 int sum[100]; 13 vector<int>order; 14 15 char num[12][10][10]={ 16 {"01110","10001","10011","10101","11001", 17 "10001","01110"}, 18 {"00100","01100","00100","00100", 19 "00100", 20 {"01110","00001","00110","01000", 21 "10000","22222"}, 22 {"22222","00010","00001", 23 "10001", 24 {"00010","01010","10010","22222", 25 "00010","00010"}, 26 {"22222","10000","11110", 27 "00001","11110"}, 28 {"01111","10001", 29 "10001", 30 {"22222", 31 "00100","00100"}, 32 {"01110","01110", 33 "10001", 34 {"01110","01111", 35 "00010","11100"}, 36 {"000","000","000", 37 "000","000"}}; 38 39 void paint( ) //绘制01字符串! 40 { 41 for(int i=0;i<=6;i++){ 42 for(int j=(int)order.size()-1;j>=0;j--){ 43 int x=order[j]; 44 printf("%s",num[x][i]); 45 if(j>0) 46 printf("%s",num[10][i]); 47 } 48 cout<<endl; 49 } 50 } 51 52 int cul(int n){ 53 int len=1; 54 sum[0]=1; 55 for(int i=1;i<=n;i++){ 56 for(int j=0;j<len;j++){ 57 sum[j]*=i; 58 } 59 int j=0; 60 while(j<len){ 61 if(sum[j]>=10){ 62 sum[j+1]+=sum[j]/10; 63 sum[j]%=10; 64 if(j+1>=len) 65 len++; 66 } 67 j++; 68 } 69 } 70 return len; 71 } 72 73 int main() 74 { 75 int n; 76 while(scanf("%d",&n)!=EOF){ 77 78 memset(sum,0,sizeof(sum)); 79 int len3=cul(n); //计算n的阶乘! 80 81 /* for(int i=0;i<len3;i++){ 82 printf("%d",sum[i]); 83 } 84 cout<<"*****"<<endl; 85 */ 86 int i=0; 87 while(sum[i]==0) //计算开头的零的数量!! 88 i++; 89 90 order.clear(); 91 if(i==0) 92 order.push_back(0); 93 while(i>0){ 94 order.push_back(i%10); 95 i/=10; 96 } 97 98 paint(); 99 } 100 101 102 return 0; 103 } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |