目录
1.前言
本文要讲解的是10进制转2进制的具体方法,以及九九乘法表的打印,最后是两者结合,打印二进制的九九乘法表。下面我们直接进入正题。
2.短除法 二进制转换
下图便是简单二进制数字的转换
int main()
{
//输入需要转化的二进制数字
int num = 0;
scanf("%d", &num);
//创建数组以储存二进制数字
int arr[100] = {0};
int sz = sizeof(num) * 8;
//储存逆向的二进制数字
int i = 0;
for (i = 1; i <= sz; i++)
{
//短除法
arr[i] = num % 2;
num = num / 2;
}
//逆向打印正常顺序的二进制数字
for (i = sz; i > 0; i--)
{
printf("%d", arr[i]);
}
return 0;
}
可以看到短除法的核心就是%2与/2。
3.九九乘法表
相信九九乘法表是学习循环必练的一道题,比较简单,这里不再啰嗦。
//九九乘法表
//void print()
//{
// int i = 0;
// for (i = 1; i < 10; i++)
// {
// int j = 1;
// for (j = 1; j <= i; j++)
// {
// printf("%d * %d = %2d ", i, j, i * j);
// }
// printf("\n");
// }
//}
//int main()
//{
// print();
// return 0;
//}
4.二进制九九乘法表
这里是本文的重点讲解部分,可以看到,短除法转化的二进制数字是储存在数组中的,并不是真正的整数。想按九九乘法表打印的大体框架来实现二进制九九乘法表的打印似乎是有些棘手的,如果我们短除法能真正返回一个二进制数字的话,那么二进制九九乘法表的打印也就迎刃而解了!
怎么实现呢?
//二进制99乘法表
int invert(int x)
{
//由于九九乘法表的二进制数字不会超过7位,这里直接设置好数组长度
int arr[8] = { 0 };
int i = 0;
//当短除法没有除尽时,循环继续
while (x)
{
for (i = 7; i > 0; i--)
{
//逆方向赋值,得到的便是正常顺序的二进制数字
arr[i] = x % 2;
x = x / 2;
}
}
//由数组元素到真正数字的转化
int sum = 0;
for (i = 1; i < 8; i++)
{
sum = arr[i] + sum * 10;
}
//返回整形二进制数字
return sum;
}
//main函数按照九九乘法表的逻辑
int main()
{
int i = 0;
for (i = 1; i < 10; i++)
{
int j = 1;
for (j = 1; j <= i; j++)
{
//利用二进制转化函数将十进制数字转化为二进制数字
printf("%d * %d = %d", invert(j),invert(i),invert(i*j));
if (j != i)
{
printf(" ");
}
}
printf("\n");
}
}
现在我仅对转化部分进行讲解,例如13 1101
1101这4个数字分别存放在下标为4 5 6 7的元素中,打印时,我们从下标为1的元素开始计算,操作到元素4之前,sum一直都是0。
当操作到元素4的时候,按我们平时的习惯,1101叫“一千一百零一”。也就是说,我们下标为4的元素,我们希望他可以乘上1k,下标为5的元素,我们希望他乘上100,以此类推,最后加在sum里面,这样便能实现我们从分散的数组元素,集中到一个整形变量里面!!
那么这样,我们便能打印出二进制的九九乘法表!
5.结语
本题是作者受人启发后而写的一篇文章,最有价值的地方莫过于将数组元素整合到整形变量的那一步,有很大的思想启发作用!!这个奇妙的点也许会在以后派上用场,因此作文与大家分享。
最后,还是希望大家可以给个三连,关注我,一起进步吧!!