流浪地球,第二天
目录
# 一、今日知识点总结
1.for循环的结构和使用
2.用uint定义防止溢出
# 二、今日做题记录
1.实现1到n的和
利用输入n的迭代,重复把n从n开始到0,加给sum,打印输出sum即可,当然也可以用for循环遍历做,当然也可以用for循环去加,这种容易想到,就不展示代码了
#include "stdio.h"
int main()
{
int n,sum;
scanf("%d",&n);
while(n)
{
sum+=n;
n--;
}
printf("%d",sum);
return 0;
}
2.判断一个数是不是2的幂:
利用位运算,因为计算机的计算是二进制的,所以进行的四则运算在计算机内实际上是二进制的运算,利用2的幂的数用二进制表示都是10000……,让其减一就会变成01111……,让这两个数进行位与运算,结果就一定是0,按照下述代码即可完成目标:
#include <stdio.h>
int main()
{
int x;
scanf("%d",&x) ;
if(x&(x-1))
{
printf("%d不是2的幂!",x);
}
else
{
printf("%d是2的幂!",x);
}
return 0;
}
当然也可以用 for循环去遍历,代码如下:
#include "stdio.h"
bool isPowerOfTwo(int n){
int i;
unsigned int k = 1; // (1)
if(n <= 0) {
return false; // (2)
}
if(n == 1) {
return true; // (3)
}
for(i = 1; i <= 31; ++i) {
k *= 2; // (4)
if(k == n) {
return true; // (5)
}
}
return false;
}
int main()
{
int num;
char yes,no;
scanf("%d",&num);
if(isPowerOfTwo(num)==1)
{
printf("%d是2的幂",num);
}
else
{
printf("%d不是2的幂",num);
}
return 0;
}
3. 判断3的幂:
不做多的讲解,方法如上,代码如下:
#include "stdio.h"
int isPowerOfTwo(int n){
int i;
unsigned int k = 1; // (1)
if(n <= 0) {
return 0; // (2)
}
if(n == 1) {
return 1; // (3)
}
for(i = 1; i <= 21; ++i) {
k *= 3; // (4)
if(k == n) {
return 1; // (5)
}
}
return 0;
}
int main()
{
int num;
char yes,no;
scanf("%d",&num);
if(isPowerOfTwo(num)==1)
{
printf("%d是3的幂",num);
}
else
{
printf("%d不是3的幂",num);
}
return 0;
}
4.判断4的幂:
方法如上,代码如下:
#include "stdio.h"
int isPowerOfTwo(int n){
int i;
unsigned int k = 1; // (1)
if(n <= 0) {
return 0; // (2)
}
if(n == 1) {
return 1; // (3)
}
for(i = 1; i <= 17; ++i) {
k *= 4; // (4)
if(k == n) {
return 1; // (5)
}
}
return 0;
}
int main()
{
int num;
char yes,no;
scanf("%d",&num);
if(isPowerOfTwo(num)==1)
{
printf("%d是4的幂",num);
}
else
{
printf("%d不是4的幂",num);
}
return 0;
}
注:
判断不同数的幂只需要修改相应地方的数即可,唯一注意的就是溢出问题,这里我交大家怎么去计算,代码如下,简单易懂:
#include "stdio.h"
#include "math.h"
int main()
{
int i,n;
for(i=1;;++i)
{
if(pow(4,i)>pow(2,32))return i;
}
}
只需要修改黑框中的值,在红框中便能得到对应的值
5.n的k个因子:
代码如下:
#include "stdio.h"
int kthFactor(int n,int k)
{
int i,cout=0;
for(i=1;i<=n;i++)
{
if(n%i==0)
{
cout++;
if(cout==k)
{
return i;
}
}
}
return -1;
}
int main()
{
int n,k;
scanf("%d%d",&n,&k);
printf("%d",kthFactor(n,k));
return 0;
}
6.判断一个数n是不是完全平方数:
定义一个变量x,让x从0开始一直遍历到n,对于每一个x都让它等于自己与自己相乘,并与n进行比较,如果得到的结果与n相等,则说明n是完全平方数,代码如下:
#include "stdio.h"
int kthFactor(int n,int k)
{
int i,cout=0;
for(i=1;i<=n;i++)
{
if(n%i==0)
{
cout++;
if(cout==k)
{
return i;
}
}
}
return -1;
}
int main()
{
int n,k;
scanf("%d%d",&n,&k);
printf("%d",kthFactor(n,k));
return 0;
}
# 三、今日收获
1.for循环中的++i和i++用处一样,但++i所运行的时间更短,推荐使用++i
2.学会了可以利用定义死循环去遍历所有的数,但会溢出
3.学会用计算机去计算一些复杂的问题,比如上述用计算机去计算n的y次幂,在不溢出的情况下,y能取得的最大值
4.在进行初始化时,要从0开始计数的变量,必须初始化为0
5.为了防止溢出,在条件允许的情况下,尽量定义成无符号类型。
本文含有隐藏内容,请 开通VIP 后查看