2021蓝桥杯真题约数和二进制表示(填空题)和双阶乘(填空题) C语言/C++

约数

题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

如果整数 a 是整数 b 的整数倍,则称 b 是 a 的约数。

请问,有多少个正整数是 2020 的约数。

运行限制
最大运行时间:1s
最大运行内存: 128M

所需变量

int sum = 0;//代表约数的个数,初始化为0

int i;//循环变量,初始化为1,代表从1开始

int n = 2020;//将其变量化,到2020终止

首先我们要知道整除的方法,就是求余!如果求余为0代表能整除

if(n%i == 0){
      sum++;
    }

思路:我们从1开始判断,如果2020能将i整除,那么我们就知道2020是i的倍数,因此我们在总和sum上+1,最后判断到2020,我们就得到最终的答案!

#include <iostream>
using namespace std;
int main()
{
  int sum = 0,i = 1,n = 2020;
  for(;i<=2020;i++){
    if(n%i == 0){
      sum++;
    }
  }
  cout<<sum<<endl;
  return 0;
}

在这里插入图片描述
**

二进制表示(填空题)

**

题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

小明要用二进制来表示 1 到 10000 的所有整数,要求不同的整数用不同的二进制数表示,请问,为了表示 1 到 10000 的所有整数,至少需要多少个二进制位?

运行限制
最大运行时间:1s
最大运行内存: 128M

所需变量
int sum;//代表所需要的位数

思路:我们可以直接用pow(2,x),代表2的x次方,也就是如果2的x次方大于我们要求的数,那么就代表这个数能被x位表示

for(;;sum++){
    if(pow(2,sum)>10000){
      break;
    }
  }

得到可以用多少位表示后,将其输出出来就可以!
完整代码如下(编译器是dev,语言是C语言):

#include <iostream>
using namespace std;
#include<math.h>
int main()
{
  int sum = 1;
  for(;;sum++){
    if(pow(2,sum)>10000){
      break;
    }
  }
  cout<<sum<<endl;
  return 0;
}

在这里插入图片描述
**

双阶乘

**
问题描述
一个正整数的双阶乘, 表示不超过这个正整数且与它有相同奇偶性的所有 正整数乘积。 nn 的双阶乘用 n ! !n!! 表示。

例如:

3!!=3×1=3
8!!=8×6×4×2=384
11!!=11×9×7×5×3×1=10395

请问, 2021!! 的最后 5 位 (这里指十进制位) 是多少?

注意: 2021 ! !=2021×2019×⋯×5×3×1 。

提示: 建议使用计算机编程解决问题。

答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一 个整数, 在提交答案时只填写这个整数, 填写多余的内容将无法得分。

运行限制
最大运行时间:1s
最大运行内存: 256M

所需变量

int sum = 1;//代表最后结果(只保留五位数)

int i;//循环变量

思路:我们从1开始不断乘下去,每次乘得到的结果都对100000求余,这样每次得到的都是最后五位数!代码如下:

for(i = 1;i<=2021;i = i+2){
    sum = (sum*i)%100000;
  }

最后将结果出输出来!该算法本人认为比较优,如果有更好的想法,欢迎q我!完整代码如下(编译器是dev,语言是C语言):

#include <iostream>
using namespace std;
int main()
{
  int sum = 1,i;
  for(i = 1;i<=2021;i = i+2){
    sum = (sum*i)%100000;
  }
  cout<<sum<<endl;
  return 0;
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值