C语言百日刷题第七天
- 61. 写一个函数isPowerOfTwo判断是不是2的幂次方
- 62. 写一个函数isPowerOfThree判断是不是3的幂次方
- 63.n 的第 k 个因子
- 64.有效的完全平方数
- 65.搜索旋转排序数组
- 66.桌上拿硬币
- 67.计算生成元
- 68.计算分子量
- 69.最佳情侣身高差
- 70.拯救外星人
61. 写一个函数isPowerOfTwo判断是不是2的幂次方
bool isPowerOfTwo(int n)
{
unsigned int k = 1;
if(n<=0)
return false;
if(n==1)
return true;
for(int i = 1;i<32;i++)
{
k*=2;
if(k==n)
return true;
}
return false;
}
62. 写一个函数isPowerOfThree判断是不是3的幂次方
bool isPowerOfThree(int n){
unsigned int k = 1;
if(n<=0)
return false;
if(n==1)
return true;
for(int i = 0;i<=20;i++)//3的20次幂已经是32位整型的上限了。
{
k*=3;
if(k==n)
return true;
}
return false;
}
63.n 的第 k 个因子
int kthFactor(int n, int k)
{
int count = 0;
for(int i = 1;i<=n;i++)
{
if(n%i==0)
count++;
if(count==k)
return i;
}
return -1;
}
64.有效的完全平方数
防止溢出,要用long long型
死循环枚举所有情况
bool isPerfectSquare(int num)
{
int i = 0;
long long sum = 0;
while(1)
{
i++;
sum=(long long)i*i;
if(sum==num)
return true;
if(sum>=num)
return false;
}
}
65.搜索旋转排序数组
int search(int* nums, int numsSize, int target)
{
int i;
for(i =0; i < numsSize; i++ )
{
if(nums[i]== target)
{
return i;
}
}
return -1;
}
66.桌上拿硬币
67.计算生成元
生成元:X+X的每一位数字之和等于Y,则X是Y的生成元。
例如:
输入216则他的最小生成元是198
因为198 + 1 +9 +8 = 216
#include<stdio.h>
int main()
{
int x, y, z, gen = 0;
scanf("%d", &y);
for (int i = 1; i < y; i++)
{
x = i; z = i;
while (i > 0)
{
x = x + i % 10;
i = i / 10;
}
i = z;
if (x == y)
{
gen = 1;
printf("%d", i);
break;
}
}
if (gen != 1)
{
printf("0");
}
return 0;
}
68.计算分子量
#include<stdio.h>
int main()
{
char c;
char s[1000];
double arr[200];
arr['C'] = 12.01;
arr['O'] = 16.00;
arr['H'] = 1.008;
arr['N'] = 14.01;
//输入字符串
scanf("%s", s);
int i = 0;
double w = 0;
//循环遍历s字符串
while (s[i] != '\0')
{
int sum = 0;
c = s[i];
i++;
//判断下一位是否为数字
while (s[i] >= '0' && s[i] <= '9')
{
//如果数字 求出数字大小
sum = sum * 10 + s[i] - '0';
//进行自加 便以判断下一位
i++;
}
//如果有数字进行以下操作
if
(sum)w = w+ sum * arr[c];
else
w = w + arr[c];
}
printf("%.3f g/mol\n", w);
return 0;
}
69.最佳情侣身高差
‘\n’表示忽略所有的空白字符,输入非空白字符结束输入 ,不加’\n’会使c接收换行符
#include<stdio.h>
int main()
{
int n,i;
char c;
double h,s;
scanf("%d\n", &n);
for(i=0;i<n;i++)
{
scanf("\n%c%lf",&c,&h);
s=0;
if(c=='M')
{
s=h/1.09;
}
else
{
s=h*1.09;
}
printf("%.2lf\n",s);
}
return 0;
}
70.拯救外星人
#include<stdio.h>
int main()
{
int a,b,i,sum=1;
scanf("%d%d",&a,&b);
for(i=1;i<=a+b;i++)
sum*=i;
printf("%d\n",sum);
}