题目内容:
由于计算机内部表达方式的限制,浮点运算都有精度问题,为了得到高精度的计算结果,就需要自己设计实现方法。(0,1)之间的任何浮点数都可以表达为两个正整数的商,为了表达这样两个数的商,可以将相除的结果存放在一维数组中,数组的每个元素存放一位十进制数字。即商的第一位存放在第一个元素中,第二位存放在第二个元素中,以此类推,就可以用数组来表达一个高精度的除法结果了。
如 16/19 的结果 0.8421052631...就可以依次存放 8、4、2、1、0、5、2、6、3、1...在数组中。
而除法的过程,则可以模仿人工列竖式做除法的方式,先将被除数乘以 10,得到一位商以后,将余数乘以 10 作为下一轮计算的被除数:
160/19->8 余 8
80/19->4 余 4
...
当某次余数为 0 时,则表明除尽。
现在,请写一个程序,输入一个分数,计算出它的小数形式。无论是否可以除尽,输出最多小数点后 200 位。输入格式:形如 a/b的两个数,其中 10<=a<b<100。输出格式:形如0.xxxxxxxxx的小数,小数点后最多 200 位。输出结束的时候要带着回车换行。
输入样例:
16/19
输出样例:
0.84210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684
//逆序输出输入的整数
/*
1、建立链表
2、建立数组,将链表值以此赋给数组
3、逆序输出数组
*/
#include <stdio.h>
#include <stdlib.h>
typedef struct node{
int value;
struct node *next;
}Node;
int main(){
Node *head, *p, *q;
int number = 0, cnt = 0, i;
int a[cnt];
head = (Node*)malloc(sizeof(Node));
head->next = NULL;
head->value = 0;
p = head;
while(number != -1){
scanf("%d", &number);
q = (Node*)malloc(sizeof(Node));
q->value = number;
q->next = NULL;
p->next = q;
p = q;
}
for(p = head->next; p->next; p = p->next)
{
a[cnt] = p->value;
cnt++;
}
for(i = cnt-1; i>=0; i--){
printf("%d", a[i]);
}
return 0;
}
该程序设计任务要求使用C语言实现高精度浮点数除法,通过数组存储除法结果的十进制数字。用户输入两个正整数(10<=a<b<100)形成分数,程序计算并输出小数形式,最多200位。通过模拟人工列竖式除法,不断更新被除数和余数直至除尽。输入样例16/19,输出显示了完整的除法结果小数部分。
781

被折叠的 条评论
为什么被折叠?



