ZOJ 1806 (小数高精度)

题意:八进制小数转化成十进制的小数。

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

例:

0.75 [8] = 7*8^-1+5*8^-2 = ( 5/8 + 7 ) / 8 = 0.953125 [10]

算法:主要就是实现上面的秦九韶算法。

实现:模拟手算除法:

#include<iostream>
#include<cstdio>
#include<cstring>

using namespace std;

const int N=100000;
char num_2[N];
char num_10[N];

int main()
{
    while(scanf("%s",num_2)!=EOF)
    {
        memset(num_10,0,sizeof num_10);
        int index=0;
        int len=strlen(num_2);
        for(int i=len-1;i>=2;i--)
        {
            int j;
            int digit=num_2[i]-‘0‘;
            for(j=0;j<index||digit;j++)
            {
                digit=digit*10+(j<index?num_10[j]-‘0‘:0);
                num_10[j]=digit/8+‘0‘;
                digit%=8;
            }
            index=j;
        }
        num_10[index]=‘\0‘;
        printf("%s [8] = 0.%s [10]\n",num_2,num_10);
    }

    return 0;
}

??

时间: 2024-11-05 18:34:52

ZOJ 1806 (小数高精度)的相关文章

zoj 1806 This Takes the Cake 计算凸四边形和三角形的面积

题目来源: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=806 题意: 凸四边形上 有8个点, 4个顶点 , 和 每2个顶点的中点.经过这8个点的每一条线段,将四边形分成2份, 求这两份面积最近的面积. 分析:  枚举, 每条线段, 计算 一边面积 S(较小), 另一边 面积 s1 = sum - S  ,   找使 S / S1 最大的 面积, 即可. 代码如下: double add(double a, double

FZU 2032 高精度小数加法

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

大数问题 加减乘除余 有参考部分网络代码如除法和减。其余原创。

大数问题集训会教案 大数问题,其实就是模拟运算,因为系统自带的int long bouble这些类型无法容纳百位千位的大数字,从而手动模拟运算过程,使用字符串来表示这样的超大数字,如果你会Java的话就简单多了,直接有一个大数类,可以像用函数一样直接调用,不过,那个是大三学滴. 大数问题适用的问题,一般是大数阶乘,大数加减乘除余方,这个嘛请参照南阳大数类型题,难度一般是省赛中最简单的3题之一. 废话不说,直接上思路先. 问题一:如何输入输出 问题二:小学生的个位与多位加法是怎么运算的?如何逆转字

PHP中处理浮点数的一些方法记录

PHP中处理浮点数的一些方法记录 请不要在程序中直接使用等号.大于.加.减.乘.除等操作浮点数,如果需要对浮点数进行以上操作,请使用下面的BC系列函数.以确保准确性及精度. 两个高精度数比较大小 int bccomp ( string $left_operand , string $right_operand [, int $scale ] ) left=right 返回 0 left<right 返回 -1 left>right 返回 1 $scale 需要比较的精度,即小数点后多少位 两个

BigDecimal在实际项目的应用及遇到的问题(转)

我们都知道,java中对大小数,高精度的计算都会用到BigDecimal.但是在实际应用中,运用BigDecimal还是会遇到一些问题.下面说一下我在项目中怎么样BigDecimal和遇到的一些问题. 1. 对商品的价格进行格式化,比如所有商品的价格保留两位小数 Java代码   /** * * @param bd  商品的价格 * @param num 保留几位小数,如num = 2 * @return */ public static String formatPrice(BigDecima

BigDecimal类(高精度小数)

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

高精度之大数乘小数

今天下载百度文库资料时发现了 发现了内蒙古电子信息学院的ACM模板. 打开看了一下刚开始就是高精度的计算问题. 于是我就写了写.说实话在我的心里对这些东西有点抵触.因为接触的时候没能很好的掌握所以以后遇到这样的问题总是逃避,虽然逼着自己也能写出来,但是就是不愿意去写. 今天看到一个人的博客让我受益很深.其实不是内容,当然内容也很好.让我感觉到,其实厉害的人不是有多大的成就,会多少别人听都没听过的知识,把一件小事情做好,做的自己满意这就是成功. 闲话不扯了,我们来说一下高精度乘法问题. 大数乘小数

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