博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ1131 Octal Fractions
阅读量:7226 次
发布时间:2019-06-29

本文共 933 字,大约阅读时间需要 3 分钟。

1 #include
2 #include
3 char s[1000]; 4 int b[4000]; 5 int main() 6 { 7 int i,j,k,n,t,len; 8 while(~scanf("%s",s)){ 9 memset(b,0,sizeof(b)); 10 len=strlen(s);11 for(t=0,i=len-1;i>=2;i--){12 n=s[i]-'0';13 for(k=j=0;j

题意:给出1个八进制小数,小数位数很多,输出转成十进制后的小数。。

暴力模拟即可,看到discuss里说拿double卡过,我想还是写个高精度计算练练手速和代码实现能力比较好。。

不过千万不要带着小数做除法。。

①先说最直接的想法,从十分位到最后一位,每次乘上8的(-i)次方,累加即可,但这样写起高精度来异常麻烦,有可能涉及到高除高。

②稍作思考,我们发现从最后一位开始到小数点之前停下来,上一位算出来的数加上这一位的数除以8即可当做当前位算出来的数。

例如:0.233  [(3/8+3)/8+2]/8就是答案。

但计算机处理如此精度的小数,高精度写的多累啊(高手勿喷)。

③于是想到了化小数为整数,每次除以8之前看看能否被8整除(这个判断应该知道吧,看后三位能不能被8整除),不能的话乘10再看,乘10的同时计数器加1,直到能被8整除,除以8。

举个例子
0.75

看5不能被8整除,5000可以,pos=3  5000/8=625

此时不能在625的基础上加7,应该加7*(10^pos),补全你乘的10,得到7625

此时7625不能被8整除,而7625000可以

pos=6  7625000/8=953125

最后输出的时候小数点往前移动pos位即可。

整个过程数组模拟计算,否则后果你知道。。 

转载于:https://www.cnblogs.com/shihuajie/archive/2013/04/19/3031587.html

你可能感兴趣的文章
ssh-keygen 免交互 ssh首次交互免输入yes
查看>>
ssh通道连接数据库问题
查看>>
ansible使用playbook批量添加用户
查看>>
通过adb命令启动的app
查看>>
【Apollo播放器】源码分析之图片加载模式
查看>>
linux mint 19.0 partition
查看>>
docker 新手向 - 防止容器自动退出的解决方案
查看>>
Linux 内核模块 HOOK 系统调用的 demo
查看>>
小黑小波比.解决执行完代码,带指定的参数值重新加载页面
查看>>
Linux下的UDP/TCP端口映射(netcat and socat)
查看>>
Linux(Centos6.5)下如何解压.zip和.rar文件
查看>>
清理k8s集群小记(只针对自己的集群)
查看>>
印象笔记·剪藏
查看>>
一步一步在Windows下搭建React Native Android开发环境
查看>>
Gentoo:existing preserved libs问题
查看>>
Linux 常用操作
查看>>
HTTP Request header
查看>>
Android TextView支持的HTML标签
查看>>
tcp CLOSE Wait
查看>>
CentOS 7重置密码
查看>>