【九度OJ】题目1137:浮点数加法 解题报告

标签(空格分隔): 九度OJ


原题地址:http://ac.jobdu.com/problem.php?pid=1137

题目描述:

求2个浮点数相加的和
题目中输入输出中出现浮点数都有如下的形式:
P1P2…Pi.Q1Q2…Qj
对于整数部分,P1P2…Pi是一个非负整数
对于小数部分,Qj不等于0

输入:

对于每组案例,第1行是测试数据的组数n,每组测试数据占2行,分别是两个加数。
每组测试数据之间有一个空行,每行数据不超过100个字符

输出:

每组案例是n行,每组测试数据有一行输出是相应的和。
输出保证一定是一个小数部分不为0的浮点数

样例输入:

2
0.111111111111111111111111111111
0.111111111111111111111111111111 10000000.655555555555555555555555555555
1.444444444444444444444444444445

样例输出:

0.222222222222222222222222222222
10000002.1

Ways

这里说的是大浮点数的问题,还好java给我们提供了BigDecimal可以直接使用。使用方法答题和BigInteger类很像。记得要使用stripTrailingZeros函数删除浮点小数末尾的0.

以下代码通过了4个案例中的3个,不知道其中的另外一个案例为什么没有A掉,希望读到这篇文章的读者能告诉我。

import java.util.*;
import java.math.*; public class Main{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
int n = scanner.nextInt();
while (n-- != 0) {
BigDecimal a = scanner.nextBigDecimal();
BigDecimal b = scanner.nextBigDecimal();
System.out.println(a.add(b).stripTrailingZeros().toString());
}
if (scanner.hasNext()){
String white = scanner.nextLine();
}
}
}
}

因为我没有A掉这个题,所以附上网友的答案备忘。

#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std; const int Max = 100;
int ia[Max], ib[Max], ta[Max], tb[Max], ic[Max], tc[Max];
char in[Max], t[Max]; int main()
{
int cases, l1, l2, l3, l4, l;
cin >> cases;
while(cases--)
{
memset(ic, 0, sizeof(ic)); memset(tc, 0, sizeof(tc));
memset(ia, 0, sizeof(ia)); memset(ta, 0, sizeof(ta));
memset(ib, 0, sizeof(ib)); memset(tb, 0, sizeof(tb));
scanf("%s", in);
l = strlen(in);
int i;
for(i=0; i<l && in[i] != '.'; i++) ia[i] = in[i] - '0';
l1 = i++;
for(int j=0; j<l1/2; j++)
{
int tem = ia[l1 - 1 - j];
ia[l1 - 1 - j] = ia[j];
ia[j] = tem;
}
for(; i<l; i++) ta[i-l1-1] = in[i] - '0';
l2 = l - l1 - 1; scanf("%s", in);
l = strlen(in);
for(i=0; i<l && in[i] != '.'; i++) ib[i] = in[i] - '0';
l3 = i++;
for(int j=0; j<l3/2; j++)
{
int tem = ib[l3 - 1 - j];
ib[l3 - 1 - j] = ib[j];
ib[j] = tem;
}
for(; i<l; i++) tb[i-l3-1] = in[i] - '0';
l4 = l - l3 - 1; l2 = max(l2, l4);
int c = 0, temp;
for(int i=l2-1; i>=0; i--)
{
temp = ta[i] + tb[i] + c;
tc[i] = temp % 10;
c = temp / 10;
} int f;
for(f=l2-1; f>=0; f--)
if(tc[f]) break; l1 = max(l1, l3);
for(int j=0; j<=l1; j++)
{
temp = ia[j] + ib[j] + c;
ic[j] = temp % 10;
c = temp / 10;
} int k;
for(k=l1; k>=0; k--)
if(ic[k]) break;
if(k == -1) l1 = 0;
else l1 = k; for(int j=l1; j>=0; j--) printf("%d", ic[j]);
if(f != -1)
{
printf(".");
for(int j=0; j<=f; j++) printf("%d", tc[j]);
}
printf("\n");
}
system("pause");
return 0;
}

附录

JAVA BigDecimal 小数点处理

保留两位小数{
方法一:{
double c=3.154215;
Java.text.DecimalFormat myformat=new java.text.DecimalFormat("0.00");
String str = myformat.format(c);
} 方式二:{
java.text.DecimalFormat df =new java.text.DecimalFormat("#.00");
df.format(你要格式化的数字);
例:new java.text.DecimalFormat("#.00").format(3.1415926)
#.00 表示两位小数 #.0000四位小数 以此类推...
} 方式三:{
double d = 3.1415926;
String result = String .format("%.2f");
%.2f %. 表示 小数点前任意位数 2 表示两位小数 格式后的结果为f 表示浮点型
}
} 四舍五入 {
double f = 111231.5585;
BigDecimal b = new BigDecimal(f);
//保留2位小数
double f1 = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
}

Date

2017 年 3 月 8 日

【九度OJ】题目1137:浮点数加法 解题报告的更多相关文章

  1. 九度OJ题目1137:浮点数加法 (JAVA)使用BigDecimal四个案例都通过了,但是超时了。

    题目描述: 求2个浮点数相加的和 题目中输入输出中出现浮点数都有如下的形式: P1P2...Pi.Q1Q2...Qj 对于整数部分,P1P2...Pi是一个非负整数 对于小数部分,Qj不等于0 输入: ...

  2. 九度oj 题目1137:浮点数加法

    题目描述: 求2个浮点数相加的和 题目中输入输出中出现浮点数都有如下的形式:P1P2...Pi.Q1Q2...Qj对于整数部分,P1P2...Pi是一个非负整数 对于小数部分,Qj不等于0 输入: 对 ...

  3. 九度OJ 题目1384:二维数组中的查找

    /********************************* * 日期:2013-10-11 * 作者:SJF0115 * 题号: 九度OJ 题目1384:二维数组中的查找 * 来源:http ...

  4. hdu 1284 关于钱币兑换的一系列问题 九度oj 题目1408:吃豆机器人

    钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  5. 九度oj题目&amp;吉大考研11年机试题全解

    九度oj题目(吉大考研11年机试题全解) 吉大考研机试2011年题目: 题目一(jobdu1105:字符串的反码).    http://ac.jobdu.com/problem.php?pid=11 ...

  6. 九度oj 题目1007:奥运排序问题

    九度oj 题目1007:奥运排序问题   恢复 题目描述: 按要求,给国家进行排名. 输入:                        有多组数据. 第一行给出国家数N,要求排名的国家数M,国家号 ...

  7. 九度oj 题目1087:约数的个数

    题目链接:http://ac.jobdu.com/problem.php?pid=1087 题目描述: 输入n个整数,依次输出每个数的约数的个数 输入: 输入的第一行为N,即数组的个数(N<=1 ...

  8. 九度OJ题目1105:字符串的反码

    tips:scanf,cin输入字符串遇到空格就停止,所以想输入一行字符并保留最后的"\0"还是用gets()函数比较好,九度OJ真操蛋,true?没有这个关键字,还是用1吧,还是 ...

  9. 九度oj题目1009:二叉搜索树

    题目描述: 判断两序列是否为同一二叉搜索树序列 输入:                        开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束. 接 ...

随机推荐

  1. 基于Kubernetes实现前后端应用的金丝雀发布

    基于Kubernetes实现前后端应用的金丝雀发布 公司的研发管理平台实现了Gitlab+Kubernetes的Devops,在ToB和ToC场景中,由于用户量大,且预发布环境和生产环境或多或少存在差 ...

  2. SM 国密算法踩坑指南

    各位,好久不见~ 最近接手网联的国密改造项目,由于对国密算法比较陌生,前期碰到了一系列国密算法加解密的问题. 所以这次总结一下,分享这个过程遇到的问题,希望帮到大家. 国密 什么是国密算法? 国密就是 ...

  3. Shell 格式化输出printf、awk

    目录 Shell 文件的格式化与相关处理 printf.awk 格式化打印printf 案例.格式化输出文件内容 输出命令echo 案例 awk数据处理工具 语法格式 处理流程 AWK内置变量 条件 ...

  4. JavaScript 链表

    ------------恢复内容开始------------ 背景 数组并不总是组织数据的最佳数据结构,原因如下.在很多编程语言中,数组的长度是固定的,所以当数组已被数据填满时,再要加入新的元素就会非 ...

  5. 【swift】用Xib实现自定义警告框(Alert)(安卓叫法:Dialog对话框)

    在写这篇博客前,先感谢两篇博客 [如何自定义的思路]:https://www.cnblogs.com/apprendre-10-28/p/10507794.html [如何绑定Xib并且使用]:htt ...

  6. Siebel调用WebService

    Siebel可以调用外部系统的接口,通过WebService的接入方式实现,所在的项目都是通过ESB,其他系统的接口都要经过ESB,由ESB提供WSDL文档,通过Siebel调用. 一.修改Tools ...

  7. RTTI (Run-time type information) in C++

    In C++, RTTI (Run-time type information) is available only for the classes which have at least one v ...

  8. 2.8 rust 枚举与模式匹配

    Enums and Pattern Matching 摘要 枚举定义 enum IpAddrKind { V4, V6, } 枚举方法 fn main() { enum Message { Quit, ...

  9. Thymeleaf标准表达式

    Thymeleaf的官网为: http://www.thymeleaf.org/ 一.变量表达式${-} 使用${-}括起来的表达式,称为变量表达式.该表达式的内容会显示在HTML标签体文本处. 该表 ...

  10. 【Matlab】求矩阵行和/列和

    行和 sum(a, 2) 列和 sum(a) 所有元素之和 sum(sum(a)) 某一列元素之和 sum(a(:,1)) %a矩阵的第一列之和 某一行元素之和 sum(a(1,:)) %a矩阵的第一 ...