思绪:
顺序存储,逆序打印,这样看起来就是顺序的!
解法一:(代码清晰易懂)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main(){
int i, input;
char num[34] = { 0 };
printf("请输入一个数(十进制):");
scanf("%d", &input);
for (i = 31; i >= 0; i--, input /= 2){
num[i] = input % 2 + '0'; //把整数1转换成字符'1',然后存入字符变量中。
}
for (i = 1; i <= 31; i += 2){ //偶数位
putchar(num[i]);
}
putchar('\n');
for (i = 0; i <= 31; i += 2){ //奇数位
putchar(num[i]);
}
putchar('\n');
system("pause");
return 0;
}
解法二:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main(){
int i, input;
char num[34] = { 0 };
printf("请输入一个数(十进制):");
scanf("%d", &input);
int tmp = input;
//在原来的数组上挑选出偶数位,用数组存储并打印
for (i = 30; i >= 0; i -= 2, input /= 4){//偶数位
num[i / 2] = input % 2 + '0';
}
puts(num);
//在原来的数组上挑选出奇数位,用数组存储并打印
input = tmp / 2;
for (i = 31; i >= 1; i -= 2, input /= 4){//奇数位
num[i / 2] = input % 2 + '0';
}
puts(num);
system("pause");
return 0;
}
解法三:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main(){
int i, input;
char num[34] = { 0 };
printf("请输入一个数(十进制):");
scanf("%d", &input);
for (i = 30; i >= 0; i -= 2){ //偶数位
putchar((input >> i & 1) + '0');//判断第i+1位是否为1,是1则打印1,是0则打印0
}
putchar('\n');
for (i = 31; i >= 1; i -= 2){ //奇数位
putchar((input >> i & 1) + '0');
}
putchar('\n');
system("pause");
return 0;
}
代码生成图: