题目链接:Log函数问题

2 / 49 Problem G FZU 2032 Log函数问题

不知道为什么...比赛时高精度难倒了一票人...成功搞出大新闻...

试了一下直接double相加超时,然后放弃(汗),然后double 有效数字最多16位的话,确实需要高精度了呢...

然后,机智的代码:

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <iostream>
  4. using namespace std;
  5.  
  6. int ans[200];
  7. char num[210];
  8.  
  9. int main() {
  10. int n;
  11. while(~scanf("%d", &n)) {
  12. memset(ans, 0, sizeof(ans));
  13.  
  14. for (int i=0; i<n; ++i) {
  15. scanf("%s", num);
  16. int len = strlen(num);
  17. int point = 0;
  18.  
  19. for (int i=0; i<len; ++i) {
  20. if (num[i] == '.') {
  21. point =i;
  22. break;
  23. }
  24. }
  25.  
  26. int cnt = 100;
  27. // 整数部分
  28. for (int i=point-1; i>=0; --i) {
  29. ans[cnt--] += num[i] - '0';
  30. }
  31.  
  32. // 小数部分
  33. cnt = 101;
  34. for (int i=point+1; i<len; ++i) {
  35. ans[cnt++] += num[i] - '0';
  36. }
  37. }
  38.  
  39. for (int i=199; i>0; --i) { // 检查进位
  40. ans[i-1] += ans[i] / 10;
  41. ans[i] %= 10;
  42. }
  43.  
  44. if (ans[113] >= 5) ans[112]++; // 四舍五入 保留12位小数
  45.  
  46. for (int i=199; i>0; --i) { // 四舍五入之后检查进位
  47. ans[i-1] += ans[i] / 10;
  48. ans[i] %= 10;
  49. }
  50.  
  51. int out = 0;
  52. for (int i=0; i<113; ++i) {
  53. if (ans[i] || i == 100) out = 1; // 遇见第一个不是0的数 或者 到了小数部分
  54. if (out) printf("%d", ans[i]); // 就可以直接输出了
  55. if (i == 100) printf(".");
  56. }
  57. printf("\n");
  58. }
  59. return 0;
  60. }

突然觉得acmerhaizhentingyukuaidene...

讲道理,高精度本来就是模拟ba...

FZU 2032 Log函数问题 模拟小数加法的更多相关文章

  1. n阶乘,位数,log函数,斯特林公式

    一.log函数 头文件: #include <math.h> 使用: 引入#include<cmath> 以e为底:log(exp(n)) 以10为底:log10(n) 以m为 ...

  2. POJ 1001 Exponentiation 模拟小数幂

    模拟小数幂 小数点位 pos 非零末位 e 长度 len 只有三种情况 pos > len pos < e e < pos < len #include <iostrea ...

  3. KEILC51可重入函数及模拟栈浅析

    MARK:文章中的红色部分是个人的理解. KEILC51可重入函数及模拟栈浅析 关键字:keilc51,模拟堆栈,可重入函数调用,参数传递,C?XBP,C?ADDXBP 摘要:本文较详细的介绍了kei ...

  4. math。h中的log函数的应用

    以10为底的log函数: 形式为 double  log10(double  x) 以e为底的log函数(即 ln)double log (double x) 如何表达log 以a为底b的对数: 用换 ...

  5. Oracle中关于处理小数点位数的几个函数,取小数位数,Oracle查询函数

    Oracle中关于处理小数点位数的几个函数,取小数位数,Oracle查询函数 关于处理小数点位数的几个oracle函数()1. 取四舍五入的几位小数select round(1.2345, 3) fr ...

  6. LeetCode 326 Power of Three(3的幂)(递归、Log函数)

    翻译 给定一个整型数,写一个函数决定它是否是3的幂(翻译可能不太合适-- 跟进: 你能否够不用不论什么循环或递归来完毕. 原文 Given an integer, write a function t ...

  7. matlab中log函数与rssi转距离

    我们通常所说的log是指以10为底的对数,而MATLAB中的log却不是这样.Matlab中的log函数在默认情况下是以e为底,即loge,如果需要计算以10为底的对数,那么需要用log10()函数. ...

  8. PAT L1-009 N个数求和(模拟分数加法)

    本题的要求很简单,就是求N个数字的和.麻烦的是,这些数字是以有理数“分子/分母”的形式给出的,你输出的和也必须是有理数的形式. 输入格式: 输入第一行给出一个正整数N(<=100).随后一行按格 ...

  9. mysql 用存储过程和函数分别模拟序列

    在其他大部分DBMS里都有序列的概念,即Sequence或Generator. 而mysql里没有,但有时真的很有用.下面分别用存储过程和函数来模拟序列,并用程序模拟并发场景来测试原子性和完整性,是否 ...

随机推荐

  1. 从POI到O2O 看百度地图如何走出未来之路

    近期O2O的烧钱融资大战如火如荼,有人已经把O2O大战,用乌合之众的群体心理失控来形容.其实厂商都不傻,O2O烧钱大家都知道,但是大家还知道O2O背后这块大蛋糕价值"万亿级". 有 ...

  2. mysql概要(六)连接

    内连接 [join on / from 表1,表二 ]效果一样 区别是:可以理解为首先取得笛卡儿积后,再 内连接:取俩表的匹配数据: 左连接:取的俩表匹配数据,并且保留未匹配数据中左表的数据,右表数据 ...

  3. 对sizeof的思考

    一.sizeof的特点(与strlen比较) 1.sizeof是运算符,strlen是函数,这意味着编译程序在编译的时候就把sizeof计算过了,所以sizeof(x)可以用来定义数组维数. 例如 i ...

  4. Ajax异步调用使用

    //验证通知号重复 function checkinformcodeagage() { var informcode = $("#txtinformcode").val(); if ...

  5. paoracle中的包头(Package)与包体(Package body)

    http://www.th7.cn/db/Oracle/201406/56949.shtml 简单的实例 create or replace package body integrationEgoTo ...

  6. Matlab中的persistent变量

    persistent, 用于定义persistent变量.persistent变量对于声明它的函数来说是局部的,但是当退出该函数时,该变量仍然保存在内存中,数值并不变.persistent变量与全局变 ...

  7. codeblock报__objc_class_name_xxx问题

    添加来一个class文件,在其他文件调用时,报下面这个错误: undefined reference to `__objc_class_name_Test' 右击Test这个类的文件弹出Propert ...

  8. git服务器搭建

    http://blog.sina.com.cn/s/blog_904dee7f0101gait.html http://www.centoscn.com/image-text/install/2014 ...

  9. html list <==> unformatted list

    两者的区别很大不得不擦呢,任何两个东西的差别都很大,不得混淆.---一个有ul/ol的选择,一个没有

  10. c++ string 与 char 互转 以及base64

    c++ string 与 char 互转 很简单如下 ] = {'A','B','C','D','E'}; printf("%s\n",bts); //char to string ...