对于任意的真分数 N/M ( 0 < N < M ),均可以求出对应的小数。如果采用链表表示各个小数,对于循环节采用循环链表表示,则所有分数均可以表示为如下链表形式。
输入: N M
输出: 转换后的小数(不超过 50 )
要求: 仅编写将分数转换为小数的函数 change( int n, int m, NODE * head ) 。
预设代码
前置代码
view plainprint?
/* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{ int data;
struct node * next;
} NODE;
void output( NODE * );
void change( int, int, NODE * );
void output( NODE * head )
{ int k=0;
printf("0.");
while ( head->next != NULL && k<50 )
{ printf("%d", head->next->data );
head = head->next;
k ++;
}
printf("\n");
}
int main()
{ int n, m;
NODE * head;
scanf("%d%d", &n, &m);
head = (NODE *)malloc( sizeof(NODE) );
head->next = NULL;
head->data = -1;
change( n, m, head );
output( head );
return 0;
}
/* PRESET CODE END - NEVER TOUCH CODE ABOVE */
测试输入 | 期待的输出 | 时间限制 | 内存限制 | 额外进程 | |
---|---|---|---|---|---|
测试用例 1 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
测试用例 2 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
测试用例 3 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
测试用例 4 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int data;
struct node *next;
} NODE;
void out(NODE *head)
{
int k = 0;
printf("0.");
while (head->next != NULL && k < 50)
{
printf("%d", head->next->data);
head = head->next;
k++;
}
printf("\n");
}
void change(int n, int m, NODE *head)
{
NODE *current = head;
for (int i = 1; i <= 50; i++)
{
if (n == 0)
break;
else
{
n = n * 10;
int Q = n / m;
n = n % m;
NODE *newNode = (NODE *)malloc(sizeof(NODE));
newNode->data = Q;
current->next = newNode;
current = newNode;
}
}
current->next = NULL;
}
int main()
{
int n, m;
NODE *head;
scanf("%d%d", &n, &m);
head = (NODE *)malloc(sizeof(NODE));
head->data = -1;
head->next = NULL;
change(n, m, head);
out(head);
NODE *current = head;
while (current != NULL)
{
NODE *temp = current;
current = current->next;
free(temp);
}
return 0;
}