2017/7/31-zznu-oj-问题 B: N! 普拉斯 -【求大数的阶乘-ll存不下-然后取尾零的个数输出-暴力模拟】

问题 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","00100",
 19 "00100","01110"},
 20 {"01110","10001","00001","00110","01000",
 21                     "10000","11111"},
 22 {"11111","00001","00010","00110","00001",
 23 "10001","01110"},
 24 {"00010","00110","01010","10010","11111",
 25 "00010","00010"},
 26  {"11111","10000","10000","11110","00001",
 27 "00001","11110"},
 28  {"01111","10000","10000","11110","10001",
 29 "10001","01110"},
 30 {"11111","00001","00010","00100","00100",
 31 "00100","00100"},
 32  {"01110","10001","10001","01110","10001",
 33 "10001","01110"},
 34  {"01110","10001","10001","01111","00001",
 35 "00010","11100"},
 36 {"000","000","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 }

(暴力模拟题,一定要耐住性子,不急不躁,稳住才能AC)

原文地址:https://www.cnblogs.com/zhazhaacmer/p/9399455.html

时间: 2024-10-07 20:42:21

2017/7/31-zznu-oj-问题 B: N! 普拉斯 -【求大数的阶乘-ll存不下-然后取尾零的个数输出-暴力模拟】的相关文章

android开发(31) 动画演示 - 从页面底部向上弹出dialog,消失时逐渐向下

我想实现一个效果,从底部向上逐渐弹出.如下图所示: 1.点击 显示 按钮时,一个dialog对话框从底部慢慢向上弹出. 2.关闭dialog时, dialog缓慢的移动向底部消失.很平滑的效果.     实现方式: 在activity中写代码如下 public class MainActivity extends Activity { Button button1; @Override protected void onCreate(Bundle savedInstanceState) { su

第31课:Spark资源调度分配内幕天机彻底解密:Driver在Cluster模式下的启动、两种不同的资源调度方式源码彻底解析、资源调度内幕总结

本課主題 Master 资源调度的源码鉴赏 Spark 的 Worker 是基于什么逻辑去启动 Executor 资源调度管理 任務調度與資源是通過 DAGScheduler.TaskScheduler.SchedulerBackend 等進行的作業調度 資源調度是指應用程序如何獲得資源 任務調度是在資源調度的基礎上進行的,沒有資源調度那麼任務調度就成為了無源之水無本之木 Master 资源调度的源码鉴赏 因為 Master 負責資源管理和調度,所以資源調度方法 scheduer 位於 Mast

麦客孤独苹果发烧友论坛 2017.5.31每日软件更新列表

SAASPASS For macOS 为电脑系统加上两步验证软件http://www.macfans.org/thread-23346-1-1.html 索恩的秩序:国王的挑战 Order of the Thorne The Kings Challenge 2.0.0.1 Mac 原生破解版角色扮演游戏http://www.macfans.org/thread-23347-1-1.html Tipard All Music Converter 3.8.31 独家中文汉化破解版 Mac 音频格式转

ZZNU - OJ - 2080 : A+B or A-B【暴力枚举】

2080 : A+B or A-B(点击左侧标题进入zznu原题页面) 时间限制:1 Sec 内存限制:0 MiB提交:8 答案正确:3 提交 状态 讨论区 题目描述 Give you three strings s1, s2 and s3. These strings contain only capital letters A,B,C,D,E. The letters that appear in the string represent a number from 0 to 9.Each

2017/03/31学习笔记

双向链表 单向链表的节点都只有一个指向下一个节点的指针单向链表的数据元素无法直接访问其前驱元素逆序访问单向链表中的元素时极其耗时的操作双向链表在单向链表的基础上增加了指向前驱的指针功能上双向链表可以完全取代单向链表的使用 栈是一种特殊的线性表 栈仅能在线性表的一端进行操作栈顶:允许操作的一端栈底:不允许操作的一端首先它是一个线性表,也就是说,栈元素具有线性关系,即前驱后继关系.只不过它是一种特殊的线性表.定义中说是在线性表的表尾进行插入和删除操作,这里表尾是指栈顶,而不是栈底.他的特殊之处就在于

2017.07.31 七月最后一天

现在5点,5点半再走啊-- 今天上午没有讲新课,跟以前一样在刷题,1049题做的时间最长--下午复习了循环的有关知识,然后简单地讲了数组的有关知识.然后从1051题开始做的还算顺利,到1055题后就懵了-- 第1054题,输入n个数,要求找出n个数的最大值,并将最大的数删除后,再输出剩余的数.提示,如果有多个最大的数,那么都要删除.如果一个数也不剩下,输出"none". #include<iostream> #include<cstdio> #include&l

2017.7.31

1.PHP删除二维数组中"某一行"的值. arraylength=count($data); for($j=0;$j<arraylength;$j++) { if($data[$j][showFlag]==0) { unset($data[$j]); } } 2.PHP合并2个数组的两种方法:arrayal_merge()和"+" 对于+,当key相同时,不管key是字符还是数组,都是舍弃后面的结果: array_merge ,当key相同时,key是字符,则

2017.3.31上午学习报告

复习了两章节法律课程,并背诵了第八单元词汇

2017.3.31下午学习报告

学习了宪法部分,并复习了上午学习的词汇