博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
FZU 2032 高精度小数加法
阅读量:6158 次
发布时间:2019-06-21

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

题目描写很没意思..就是说给出n个小数 求它们的总和

因为给出的小数点后最多16位而要求保存至12位 而能直接使用的最精确的double只能到12位 于是13的进位可能被忽略 于是不可以用double

于是它就是一个很裸的小数高精度加法..还只是加法..

在比赛的时候学长很快就敲出来了代码并且AC 但是被别人极多提交的极短且超时代码唬住(猜测应该是直接相加) 以为直接相加的O(N)的复杂度尚且不可..所以甚至连试做都没有 

赛后写出代码F9直接运行 但是小数上的进位转到整数上遗漏 更改后AC 

#include
#include
#include
#include
#include
using namespace std;int aq[300];int bq[300];int aw[300];int bw[300];char s[300];int main() { int n; while(scanf("%d",&n)!=EOF) { memset(bq,0,sizeof(bq)); memset(bw,0,sizeof(bw)); for(int j=0; j
=0; i--) { aq[ww++]=(s[i]-'0'); } int jin=0; for(int i=w-1; i>=0; i--) { bw[i]+=aw[i]; bw[i]+=jin; jin=bw[i]/10; bw[i]%=10; } for(int i=0; i
=5) { jin=1; for(int i=11; i>=0; i--) { bw[i]+=jin; jin=bw[i]/10; bw[i]%=10; if(jin==0) break; } if(jin!=0) { for(int i=0;; i++) { bq[i]+=jin; jin=bq[i]/10; bq[i]%=10; if(jin==0) break; } } } int ok=true; for(int i=270; i>=0; i--) { if(bq[i]!=0) ok=false; if(ok) continue; printf("%d",bq[i]); } if(ok) printf("0"); printf("."); for(int i=0; i<12; i++) printf("%d",bw[i]); printf("\n"); }}

  

转载于:https://www.cnblogs.com/rayrayrainrain/p/5366096.html

你可能感兴趣的文章
用户调研(补)
查看>>
ExtJS之开篇:我来了
查看>>
☆1018
查看>>
oracle 去掉空格
查看>>
6.13心得
查看>>
Runtime类
查看>>
eclipse decompiler
查看>>
记一个搜索网盘资源的网站
查看>>
jdk1.7和jdk1.8的String的getByte方法的差异
查看>>
java父子进程通信
查看>>
Android ADB server didn't ACK * failed to start daemon * 简单有效的解决方案
查看>>
Olap学习笔记
查看>>
Codeforces Round #431 (Div. 1)
查看>>
如何进行数组去重
查看>>
将标题空格替换为 '_' , 并自动复制到剪切板上
查看>>
List Collections sort
查看>>
Mysql -- You can't specify target table 'address' for update in FROM clause
查看>>
使用局部标准差实现图像的局部对比度增强算法。
查看>>
2017-2018-1 20165313 《信息安全系统设计基础》第八周学习总结
查看>>
《代码敲不队》第四次作业:项目需求调研与分析
查看>>