NYOJ91 阶乘之和 与全加器设计Verilog HDL




阶乘之和

时间限制:3000 ms  |  内存限制:65535 KB
难度:3
描述

给你一个非负数整数n,判断n是不是一些数(这些数不允许重复使用,且为正数)的阶乘之和,如9=1!+2!+3!,如果是,则输出Yes,否则输出No;

输入
第一行有一个整数0<m<100,表示有m组测试数据;
每组测试数据有一个正整数n<1000000;
输出
如果符合条件,输出Yes,否则输出No;
样例输入
2910
样例输出
YesNo
上传者

AC 代码

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
      int a[10] = {1,2,6,24,120,720,5040,40320,362880};
      int n, m ;
      scanf("%d", &n);
      while(n--)
      {
         scanf("%d", &m);
         for(int i = 8; i>=0; i--)
         {//贪心思想每次先装最大的
             if(m >= a[i])
             {
                 m-=a[i];
             }
         }
         if(m == 0)
         {
             //如果最后是0 的话那么代表这个玩意可以用阶层表示的
              printf("Yes\n");
         }
         else
         {
             printf("No\n");
         }
      }

      return 0;
}

解题思路主要是贪心思路即可求解

下面是全加器的  一般是真值表, 然后化简卡罗图, 最后实现表达式   

下面主要采用门级建模实现的, 具体的全加器的电路其实看代码就可以知道的

看代码:

module fulladd(a, b, cin,cout, sum);
  //输入输出端口说明
  input a,b,cin;
  output sum, cout;
  //信号类型说明
  wire s1,c2,c1;
  xor(s1,a,b);
  and(c1, a,b);
  xor(sum, s1, cin);
  and(c2 ,s1,cin);
  xor(cout,c2,c1);
  

endmodule

下面是行为建模

看些test bench测试文件

module twb;

	// Inputs
	reg a;
	reg b;
	reg cin;

	// Outputs
	wire cout;
	wire sum;

	// Instantiate the Unit Under Test (UUT)
	counter uut (
		.a(a), 
		.b(b), 
		.cin(cin), 
		.cout(cout), 
		.sum(sum)
	);

	initial begin
		// Initialize Inputs
		a = 0;
		b = 0;
		cin = 0;

		// Wait 100 ns for global reset to finish
		 #10;
		 a = 1'b1; b = 1'b0 ; cin = 1'b1;
		#10 a = 1'b0; b = 1'b1 ; cin = 1'b1;
		
		#10  a = 1'b1; b = 1'b1 ; cin = 1'b1;
		#10  a = 1'b1; b = 1'b0 ; cin = 1'b0;
        
		// Add stimulus here

	end
      
endmodule


wangxiaoming CSDN认证博客专家 架构 Spring Boot Redis
博客是很好的总结和记录工具,如果有问题,来不及回复,关注微信公众号:程序员开发者社区,获取我的联系方式,向我提问,也可以给我发送邮件,联系 1275801617@qq.com
©️2020 CSDN 皮肤主题: Age of Ai 设计师: meimeiellie 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值