zju1086 (高精度)解题报告

原创 2011年01月20日 23:16:00

 

Octal Fractions


Time Limit: 1 Second      Memory Limit: 32768 KB


Fractions in octal (base 8) notation can be expressed exactly in decimal notation. For example, 0.75 in octal is 0.963125 (7/8 + 5/64) in decimal. All octal numbers of n digits to the right of the octal point can be expressed in no more than 3n decimal digits to the right of the decimal point.

Write a program to convert octal numerals between 0 and 1, inclusive, into equivalent decimal numerals. The input to your program will consist of octal numbers, one per line, to be converted. Each input number has the form 0.d1d2d3 ... dk, where the di are octal digits (0..7). There is no limit on k. Your output will consist of a sequence of lines of the form

0.d1d2d3 ... dk [8] = 0.D1D2D3 ... Dm [10]

where the left side is the input (in octal), and the right hand side the decimal (base 10) equivalent. There must be no trailing zeros, i.e. Dm is not equal to 0.


SAMPLE INPUT

0.75
0.0001
0.01234567


SAMPLE OUTPUT

0.75 [8] = 0.953125 [10]
0.0001 [8] = 0.000244140625 [10]
0.01234567 [8] = 0.020408093929290771484375 [10]

题目大一就是说给一个8进制的数,求出对应的十进制数,按题目要求来看最先想到得就是用每一位除以对应的8的幂,但是很显然,会受到精度的影响,所以可以换一种思路,例如,0.75【8】=((5/8)+7)/8【10】,所以之后就只要模拟除法进行高精度计算就可以了。

代码:

语言:c++

 

#include<iostream>

#include<cstring>

#include<cstdlib>

using namespace std;

int main()

{

char result[10000],a[10000];//result[]是十进制数结果,a[]是输入的8进制数

int count,len,i,j,num,temp;//len是8进制数的长度,count是十进制数的长度,num是每次取8进制数的一位转化成的整型数

while(scanf("%s",a)!=EOF)

{

count=0;//十进制数一开始的长度为0

len=strlen(a);

for(i=0;i<10000;++i)

result[i]='0';      //每次都先将结果数组置0

for(i=len-1;i>=2;--i)//从8进制数的最后一位开始取,进行高精度除法

{

num=int(a[i])-'0';//num用来存放整型数

for(j=0;j<count||num;++j)//判断条件为j超过十进制数的长度和num=0,即直到num除尽

{

if(j<count)

temp=num*10+(int(result[j])-'0');

else

temp=num*10;

result[j]=char(temp/8)+'0';//商

num=temp%8;//余数

}

result[j]='/0';//设置result数组的结尾标志符,以便输出和求长度;

count=strlen(result);//count为result数组的长度即十进制数的当前长度

}

cout<<a<<" [8] = 0."<<result<<" [10]"<<endl;

}

return 0;

}

 

 

ZJU2017 Simple Arithmetics - 高精度计算+格式处理

ZJU2017 PKU1396 Simple Arithmetics - Central Europe 2000题目描述:输入两个数字和一个操作符,数字长度不超过500,操作符可以是+,-,*任意一种...
  • tiaotiaoyly
  • tiaotiaoyly
  • 2008年02月11日 00:50
  • 2146

POJ3331解题报告 高精度幂

The Idiot of the Year Contest!Time Limit: 2000MS Memory Limit: 65536KTotal Submissions: 3074 Accepte...
  • xinghongduo
  • xinghongduo
  • 2011年02月01日 21:12
  • 737

poj解题报告——2313

开始假设b[i] = a[i](1 Mid(b[i - 1], a[i], b[i + 1]) (2
  • Lingfu74
  • Lingfu74
  • 2015年07月28日 13:36
  • 555

NOIP2016提高组解题报告

D1T1玩具谜题   模拟 D1T2天天爱跑步   LCA,树链剖分 D1T3换教室  DP,数学期望,最短路 D2T1组合数问题   数学 D2T2蚯蚓   单调队列,模拟 D2T...
  • qwerty1125
  • qwerty1125
  • 2017年09月10日 20:42
  • 274

算法分析与设计解题报告

解题报告格式:         ①原题中文大意; ②算法思想及解题用到的主要数据结构; ③详细解题思路; ④逐步求精算法描述(含过程及变量说明); ⑤程序注释清单(重要过程的说明); ⑥...
  • u011394079
  • u011394079
  • 2014年09月24日 11:42
  • 255

POJ 1001 求高精度幂(高精度)

Description 对数值很大、精度很高的数进行高精度计算是一类十分常见的问题。比如,对国债进行计算就是属于这类问题。  现在要你解决的问题是:对一个实数R( 0.0 Input T输入包括多...
  • u012618882
  • u012618882
  • 2013年10月29日 21:50
  • 1457

高精度减法——一步一步算法篇

高精度减法利用竖式计算的方式,注意借位和错位,还有前导0。#include #include #include #include #include using namespace std; int m...
  • zhhe0101
  • zhhe0101
  • 2016年05月15日 19:20
  • 1711

高精度 A+B Problem

题目:请戳此处 #include #include #include char s[1001]; int a[1001],b[1001],c[1002],al,bl,cl,i; int main() ...
  • YALI_xunzhen
  • YALI_xunzhen
  • 2016年02月04日 15:14
  • 555

pku 1001 高精度 Exponentiation 解题报告

一、题目: Exponentiation二、题意:求分数的幂.三、解决的方法:      对于高精度的问题,我们仍然采用经典的想法,即将数值一位一位地存储到大数组中。那么在计算的过程中,我们就一位一位...
  • find_my_dream
  • find_my_dream
  • 2009年02月22日 13:14
  • 2643

HDU 1254 推箱子 解题报告

HDU 1254的解题报告
  • lawk97
  • lawk97
  • 2016年09月05日 10:17
  • 388
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:zju1086 (高精度)解题报告
举报原因:
原因补充:

(最多只允许输入30个字)