R 估算身高
#include<stdio.h>
int main()
{
char sex; double bone;
scanf("%c %lf", &sex, &bone);
printf("%.1lf", (sex == 'M') ? bone * 1.88 + 32 : bone * 1.94 + 28.7);
}
S 实数除法
两个实数 a 和 b的除法运算:
如果 b 是接近0(绝对值小于等于 )的数,则输出divisor near zero,否则输出 a/b 的结果值,结果保留小数点后十位。
#include<stdio.h>
#include<math.h>
int main()
{
double a,b;
scanf("%lf %lf", &a, &b);
if(fabs(b) < 10e-8)//不是<=是<
printf("divisor near zero");
else
printf("%.10lf", a / b);
return 0;
}
T 位求反
输入一个整数x (x为int),输出对 x 执行下列操作后的结果值:
将x 中从第 p 位开始右边的 b 个(二进制)位求反(1即变成0,0变成1), x的其余各位保持不变
#include<stdio.h>
int main()
{
unsigned int inte;
int p, n;
scanf("%d %d %d", &inte, &p, &n);
unsigned int change = 1 << p + 1;
//需要注意这里当位变化大于31的时候
//设置为int会出现溢出问题
int nn = change >> n;
change -= nn ? nn : 1;
int temp = inte;
temp &= ~change;
//temp 保留不变化的位
inte &= change;
inte = ~inte;
inte &= change;
// inte用于变化
inte |= temp;
printf("%u", inte);
return 0;
}
U 位运算与逻辑运算
#include<stdio.h>
int main()
{
int a,b;
scanf("%d %d", &a, &b);
printf("%d\n%d\n", a && b, a & b);
unsigned c = a;
if(b >= 0 && b < 32)
printf("%d\n%d", a >> b, c >> b);
}
V 位运算
给定一个int型整数x ,将x 的二进制表示中第 i 位和第 j 位的值互换。 。
注意: x 的二进制表示的最右边为第0位。
#include<stdio.h>
int main()
{
int x, i, j;
scanf("%d %d %d", &x, &i, &j);
int tempi = 1 << i;
int tempj = 1 << j;
int temp = x;
temp &= ~tempi;
temp &= ~tempj;
//将i和j位归零
tempi &= x;
tempj &= x;
int i2 = tempi && 1;
int j2 = tempj && 1;
//判断i和j是否需要互换
if((i2 && j2) || (!i2 && !j2))
printf("%d", x);
else
{
i2 <<= j;
j2 <<= i;
temp |= j2;
temp |= i2;
printf("%d", temp);
}
}
W 平均数
Input two integers a and b of type int, and output average integer of them. Test the program with data in range from INT_MIN to INT_MAX.
Note: only type int can be used in the program.
#include<stdio.h>
//虽然用longlong可以直接秒
//但是只能用int就考虑一下不同情况即可
int main()
{
int a, b;
scanf("%d %d", &a, &b);
int res ;
int posa = a >= 0;
int posb = b >= 0;
if(!(posa ^ posb))
{
res = a/2 + b/2;
if(a&1 && b&1)
{
if(posa)
res++;
else
res--;
}
}
else
{
res = (a + b) / 2;
}
printf("%d", res);
}