首页 > 代码库 > 求循环小数
求循环小数
对于任意的真分数 N/M ( 0 < N < M ),均可以求出对应的小数。如果采用链表表示各个小数,对于循环节采用循环链表表示,则所有分数均可以表示为如下链表形式。
此题需要提交所有代码,不能只提交子函数change。
输入: N M
输出: 转换后的小数(不超过 50 )
要求: 仅编写将分数转换为小数的函数 change( int n, int m, NODE * head ) 。
/* 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"); } void change(int n, int m, NODE * head) { int a = n, b[50] = {0}, i=0, j=0; NODE * tmp = NULL; NODE * p = NULL, *q = head; do { b[i++] = a *= 10; for (p = head->next, j=0; p!=NULL && j<i-1; p=p->next) { if (b[j++] == a) { q->next = p; return; } } tmp = (NODE *)malloc(sizeof(NODE)); tmp->data = http://www.mamicode.com/a / m; a %= m; q->next = tmp; q = tmp; q->next = NULL; } while (a && i<50); } int main() { int n, m; NODE * head; scanf("%d%d", &n, &m); head = (NODE *)malloc( sizeof(NODE) ); head->next = NULL; head->data = http://www.mamicode.com/-1; change( n, m, head ); output( head ); return 0; }
每位除法的余数作为判断循环的依据,必须被存储,而结构体NODE中没有该域,所以单独申请一个数组,遵照题意,输出长度不会超过50位,所以数组开到50即可。
注意循环结束条件,避免数组越界。
求循环小数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。