HDU1753 大明A+B(带小数的大数加法)
来源:互联网 发布:阿里云如何购买域名 编辑:程序博客网 时间:2024/06/02 13:21
Description
话说,经过了漫长的一个多月,小明已经成长了许多,所以他改了一个名字叫“大明”。
这时他已经不是那个只会做100以内加法的那个“小明”了,现在他甚至会任意长度的正小数的加法。
现在,给你两个正的小数A和B,你的任务是代表大明计算出A+B的值。
这时他已经不是那个只会做100以内加法的那个“小明”了,现在他甚至会任意长度的正小数的加法。
现在,给你两个正的小数A和B,你的任务是代表大明计算出A+B的值。
Input
本题目包含多组测试数据,请处理到文件结束。
每一组测试数据在一行里面包含两个长度不大于400的正小数A和B。
每一组测试数据在一行里面包含两个长度不大于400的正小数A和B。
Output
请在一行里面输出输出A+B的值,请输出最简形式。详细要求请见Sample Output。
Sample Input
1.1 2.91.1111111111 2.34443233431 1.1
Sample Output
43.45554344542.1
算是一道模拟题,用C语言些相对复杂,但用Java就非常简单,但我觉得还是要用C语言写一遍,理解其中的原理,对于自己解决问题的能力还有思维能力有一个提高!
首先是c语言版的:
#include <stdio.h>#include <string.h>char str1[401], str2[402];int a[401], b[401];void Fun(char str[])//处理字符串{ int len = strlen(str); int index=len;//首先赋值整数长度为字符串长度 for(int i = 0; i < len; i++) if(str[i] == '.') index = i;//寻找整数长度 int k = 0; for(int i = index - 1; i >= 0; i--)//把整数部分赋值给a数组 a[k++] += (str[i] - '0'); k = 0; for(int i = index+1; i < len; i++)//把小数部分赋值给b数组 b[k++] += (str[i] - '0');}void Output()//计算{ int x1=0, x2=0; bool flag = 0; int k = 0; bool flag2 = 1; for(int i = 400; i >= 0; i--)//小数部分相加 { b[i] += k; k = b[i]/10; b[i] %= 10; if(b[i] != 0 && flag2) { x2 = i;//寻找不为0的,也就是小数结束的位置 flag2 = 0;//标记,说明有小数部分 } } for(int i = 0; i < 400; i++)//整数部分相加 { a[i] += k; k = a[i]/10; a[i] %= 10; if(a[i] != 0) x1 = i;//寻找整数开始的位置 } if(k != 0)//如果k为0,说明小数相加取得的结果大于0,需要进位 { a[400] += k; x1 = 400; } for(int i = x1; i >= 0; i--)//输出整数 printf ("%d", a[i]); if(!flag2)//如果有小数,输出小数部分 { printf ("."); for(int i = 0; i <= x2; i++) printf ("%d", b[i]); } printf ("\n");}int main(){ while (~scanf ("%s %s", str1, str2)) { memset(a, 0, sizeof(a)); memset(b, 0, sizeof(b)); Fun(str1); Fun(str2); Output(); } return 0;}还有Java:
import java.util.*;import java.io.*;import java.math.*;public class Main{ public static void main(String[] args) { Scanner in = new Scanner(System.in); while(in.hasNext()) { BigDecimal a = in.nextBigDecimal(); BigDecimal b = in.nextBigDecimal(); System.out.println(a.add(b).stripTrailingZeros().toPlainString()); //stripxxxx 去掉后置0 //toplainstring是返回普通计数法 } }}
0 0
- HDU1753 大明A+B(带小数的大数加法)
- hdu1753 大明A+B(高精度加法)
- 大明A+B(hdu1753)大数,java
- HDU1753—大明A+B(大正小数相加)
- hdu1753 大明A+B (java大数练习第二弹 高精度小数)
- 大明A+B hdu1753
- hdu1753----大明A+B
- hdu1753 大明A+B
- hdu1753大明A+B
- hdu1753 大明A+B
- hdu1753大明A+B
- hdu1753 大明A+B
- hdu1753 大明A+B
- HDU1753 大明A+B
- Hdu1753 大明A+B
- NYOJ513 A+B Problem IV(带小数的大数加法)
- 杭电ACM 1753 大明A+B(大数:正小数加法)
- HDOJ 1753 大明A+B (高精度的小数加法 java )
- UE编辑器加入鼠标右键
- C++智能指针之auto_ptr
- git#reflog
- std::string和std::wstring相互转换的转换方法(转)
- 服务器被入侵(minerd挖矿程序)
- HDU1753 大明A+B(带小数的大数加法)
- 如想给一个easyui的combobox组件在获取json数据之前添加数据
- 创业挣的首先是认知,接下来才是钱
- UGUI实现帧动画
- HDU 2080 夹角有多大II(余弦公式)
- 编译Memcached测试客户端连接【web级ubuntu速学课程】
- Codeforces 154B Colliders
- 杭电-2012 素数判定 (素数打表)
- memcached存储大数据的问题