Professional Documents
Culture Documents
输出 浮点数据 的 二进制表达形式
提示:使用 C 语言中数据结构 联合 union ,定义方式和 结构 struct 相同,使用方式也很
相似
#include <stdio.h>
#include <stdint.h>
union Float {
float f;
uint32_t i;
};
int main() {
union Float num;
scanf("%f", &num.f);
printf("浮点数的值为: %f\n", num.f);
printf("二进制表示为: ");
for (int i = 31; i >= 0; i--) {
printf("%d", (num.i >> i) & 1);
}
printf("\n");
return 0;
}
设计思路:通过共用体,将浮点数的 ieee754 机器码原封不动转移到一个整数中,当作二进
制整数处理,通过位运算,每次循环一位,最后把 32 位都输出出来。
第二题 杨辉三角应用
问题一、图书馆门口的台阶有 25 阶,一步一阶或者一步两阶,有多少种不同的通过方式?
#include<stdio.h>
int main()
{
int ways[31] = {0};
ways[1] = 1;
ways[2] = 2;
for (int i = 3; i <= 25;i++)
{
ways[i] = ways[i - 1] + ways[i - 2];
}
printf("方法总数为:%d\n", ways[25]);
return 0;
}
设计思路:考虑某一级台阶,它的方法总数为前一级台阶的方法数+前两级台阶的方法数,
因为只能从这两个位置到达,因此使用循环每次更新一个位置的方法数,最后得到答案
121393
int main()
{
int fibonacci[10] = {1, 1, 2, 3, 5, 8, 13, 21, 34, 55};
int fibonacci_sum[10] = {0};
for (int i = 0;i<10;i++)
{
for (int j = 0;j<=i;j++)
{
fibonacci_sum[i] += fibonacci[j];
}
}
for (int i = 0; i < 10;i++)
{
if(fibonacci_sum[i]>50)
{
printf("%d\n", i);
break;
}
}
return 0;
}
设计思路:满足任意三个数字不能组成三角形的数列是斐波那契数列,因此直接从小到大
排列求前缀和,找到满足条件的 i 的最大值求解。