高精度小数

题目内容:

由于计算机内部表达方式的限制,浮点运算都有精度问题,为了得到高精度的计算结果,就需要自己设计实现方法。

(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。也就是说,这个小数一定是小于1的正数。

提示:输入是带着两个数中间的“/”的,所以scanf应采用“%d/%d”这样的输入格式。

输出格式:

形如

0.xxxxxxxxx

的小数,小数点后最多200位。输出结束的时候要带着回车换行。如果a/b是一个有限不循环小数,则输出完所有的有效位就可以了,不需要再输出后面的0来凑满200位。

# include <stdio.h>
int main()
{
int n,m,c = 0;
scanf("%d/%d",&n,&m);
printf("0.");
while ( c < 200) {
c++;
n *= 10;
printf("%d",n/m);
n %= m;
if ( n == 0)
break;
}

return 0;
}

时间: 2024-10-11 08:32:34

高精度小数的相关文章

BigDecimal类(高精度小数)

位置:java.math.BigDecimal 作用:提供高精度小数数据类型及相关操作 一.基本介绍 BigDecimal为不可变的.任意精度的有符号十进制数,其值为(unscaledValue * 10-scale)其中,unscaledValue(非标度值)为任意精度的整数.scale(标度)为32位整型(可为负) 提供以下操作:算术.标度操作.舍入.比较.哈希算法和格式转换. 用户能通过提供MathContext对象完全控制BigDecimal的舍入行为(也可使用类内提供的8种舍入模式).

hdu 1063 Exponentiation (高精度小数乘法)

//大数继续,额,要吐了. Problem Description Problems involving the computation of exact values of very large magnitude and precision are common. For example, the computation of the national debt is a taxing experience for many computer systems. This problem re

Java中的高精度整数和高精度小数

在实际编码中,会遇到很多高精度的事例,比如,在计算金钱的时候就需要保留高精度小数,这样计算才不会有太大误差: 在下面的代码中,我们验证了,当两个float型的数字相加,得到的结果和我们的预期结果是有误差的,为了减小和防止这种误差的出现,我们需要使用BigInteger类和BigDecimal类来计算. package com.ietree.base.number; import java.math.BigDecimal; import java.math.BigInteger; public c

FZU 2032 高精度小数加法

题目描写很没意思..就是说给出n个小数 求它们的总和 因为给出的小数点后最多16位而要求保存至12位 而能直接使用的最精确的double只能到12位 于是13的进位可能被忽略 于是不可以用double 于是它就是一个很裸的小数高精度加法..还只是加法.. 在比赛的时候学长很快就敲出来了代码并且AC 但是被别人极多提交的极短且超时代码唬住(猜测应该是直接相加) 以为直接相加的O(N)的复杂度尚且不可..所以甚至连试做都没有 赛后写出代码F9直接运行 但是小数上的进位转到整数上遗漏 更改后AC #i

(博弈论 高精度小数)51NOD 1185 威佐夫游戏 V2

有2堆石子.A B两个人轮流拿,A先拿.每次可以从一堆中取任意个或从2堆中取相同数量的石子,但不可不取.拿到最后1颗石子的人获胜.假设A B都非常聪明,拿石子的过程中不会出现失误.给出2堆石子的数量,问最后谁能赢得比赛. 例如:2堆石子分别为3颗和5颗.那么不论A怎样拿,B都有对应的方法拿到最后1颗. Input 第1行:一个数T,表示后面用作输入测试的数的数量.(1 <= T <= 10000) 第2 - T + 1行:每行2个数分别是2堆石子的数量,中间用空格分隔.(1 <= N &

YT14-HDU-A+B(高精度小数)

Problem Description 话说,经过了漫长的一个多月,小明已经成长了许多,所以他改了一个名字叫"大明". 这时他已经不是那个只会做100以内加法的那个"小明"了,现在他甚至会任意长度的正小数的加法. 现在,给你两个正的小数A和B,你的任务是代表大明计算出A+B的值. Input 本题目包含多组测试数据,请处理到文件结束. 每一组测试数据在一行里面包含两个长度不大于400的正小数A和B. Output 请在一行里面输出输出A+B的值,请输出最简形式.详细

高精度小数加法

例题链接:hdu1753   http://acm.hdu.edu.cn/showproblem.php?pid=1753 代码: #include<stdio.h> #include<string.h> #include<iostream> using namespace std; const int maxn = 500; char a[maxn]; char b[maxn]; int aa1[maxn]; int aa2[maxn]; int bb1[maxn];

51nod 1873 初中的算术【Java BigDecimal/高精度小数】

1873 初中的算术 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题  收藏  关注 Noder现在上初三了,正在开始复习中考.他每天要计算型如 (a× a× a× ?× a)n个a 的式子. 其中 0.0<a<99.999,0<n<26 . 虽然Noder会计算,但是老是算错,现在他想要你来写一个程序输出正确的结果,以便他核对. Input 单组测试数据. 第一行有一个实数a和一个整数n,

HDU高精度总结(java大数类)

  HDU1002   A + B Problem II [题意]大数相加 [链接]http://acm.hdu.edu.cn/showproblem.php?pid=1002 Sample Input 2 1 2 112233445566778899 998877665544332211 Sample Output Case 1: 1 + 2 = 3 Case 2: 112233445566778899 + 998877665544332211 = 1111111111111111110 代码