题目如图
在这里,我用链表对其进行处理,其实仔细研究题目会发现,每次(除第一次) 是在原有的字符串前加入0或1(奇数次加1偶数次加0),如此程序就比较容易实现。
结构体和初始化函数
typedef struct num{
int data;
struct num *front;
struct num *next;
};
void init(num **node){
*node = (num*)malloc(sizeof(num));
(*node)->front = NULL;
(*node)->next = NULL;
}
对字符串进行转化的函数
void change(num **node,int n){ //n为用户输入的数,也就是转换次数
int i = 1;
while (i <= n){
if (*node ==NULL){ //如果链表结点为空,将第一个结点的数据域置为1
*node = (num*)malloc(sizeof(num));
(*node)->data = 1;
(*node)->front = NULL;
(*node)->next = NULL;
}
else{ //若不为空,则插入结点(头插法)
num *target = *node;
num *temp = (num*)malloc(sizeof(num));
while (target->front != NULL){
target = target->front;
}
if (i % 2 == 1){ //奇数次加1
temp->data = 1;
target->front = temp;
temp->front = NULL;
temp->next = target;
}
else{ //偶数次加0
temp->data = 0;
target->front = temp;
temp->front = NULL;
temp->next = target;
}
}
i++;
}
}
遍历函数
void bianli(num *node){
num *temp = node;
while (temp->front != NULL){ //找到最前面的结点
temp = temp->front;
}
for (; temp->next != NULL; temp = temp->next){
printf("%d\t", temp->data); //依次输出各结点数据域的值
}
printf("%d\t", temp->data); //最后一个结点
}
主函数
int _tmain(int argc, _TCHAR* argv[])
{
int n;
printf("请输入一个整数:");
scanf("%d", &n);
if (n != 0){
num *pnum = NULL;
change(&pnum, n);
bianli(pnum);
}
else{ //若用户输入的是0,则返回0
printf("0\n");
}
system("pause");
return 0;
}
此外,所有代码中需要引入的头文件
#include "stdafx.h" //标准系统包含文件的包含文件
#include "malloc.h" //动态分配空间
#include"stdlib.h" //system函数
下面是测试数据