题目:http://acm.hdu.edu.cn/showproblem.php?pid=1753

本题要求是,进行多位的小数加法,由于位数很多,所以不能用double类型存储,可以用字符串存储,然后模拟小数的计算过程.通过一个例子,说明一下我的解题思路:

例如,计算1.2345 + 678.9,思路如下:

去掉小数点之前,记录小数点的位置,当做整数相加的结果,根据小数点的位置,按照小数的形式输出.

C++代码如下:

#include<iostream>
#include<string>
using namespace std; #define max(a,b) (a>b?a:b) int main()
{
string s1,s2;
while(cin>>s1>>s2)
{
int i,j;
int len_1 = s1.length();
int len_2 = s2.length(); for(i=0;i<len_1;i++)
if(s1[i]=='.')
break;
int int_len_1 = i;//s1的整数位长度
int decimal_len_1 = len_1 - int_len_1 - 1;//s1的小数位长度 for(i=0;i<len_2;i++)
if(s2[i]=='.')
break;
int int_len_2 = i;//s2的整数位长度
int decimal_len_2 = len_2 - int_len_2 - 1;//s2的小数位长度 //补齐整数位,使s1和s2的整数位对齐
if(int_len_1<int_len_2)
for(i=1;i<=int_len_2-int_len_1;i++)
s1 = '0' + s1;
else if(int_len_2<int_len_1)
for(i=1;i<=int_len_1-int_len_2;i++)
s2 = '0' + s2; //在s1和s2的前面多加1位0,因为例如:2.6+7.5 = 10.1整数位数变多了.
s1 = '0' + s1;
s2 = '0' + s2; //补齐小数位,使s1和s2小数位对齐
if(decimal_len_1<decimal_len_2)
for(i=1;i<=decimal_len_2-decimal_len_1;i++)
s1 = s1 + '0';
else if(decimal_len_2<decimal_len_1)
for(i=1;i<=decimal_len_1-decimal_len_2;i++)
s2 = s2 + '0'; int node = max(int_len_1,int_len_2)+1;//小数点的下标 //去掉小数点
s1 = s1.erase(node,1);
s2 = s2.erase(node,1); //下面,可以将s1和s2进行整数加法计算.
//模拟"整数"s1和s2的加法过程,结果存在s1中
int len = s1.length();
int c = 0;
for(i=len-1;i>=0;i--)
{
int x = s1[i] - '0';//将s1的某个字符转化为字符对应的数字
int y = s2[i] - '0'; c += (x+y);
s1[i] = (c % 10 + '0');//注意 +'0'是将数字 c%10 转化为对应的字符 c /= 10;
} //至此,计算完毕,下面是输出过程. for(i=0;i<len;i++)
if(s1[i]!='0')//从非零的整数位开始输出
break;
for(j=i;j<node;j++)
cout << s1[j];//输出整数位 for(j=len-1;j>=node;j--)//看看小数为是否都为0
if(s1[j]!='0')
break;
if(j>=node)//在这种情况下,小数为不全为0
{
cout << ".";//输出小数点
for(i=node;i<=j;i++)
cout << s1[i];//输出小数位
} cout << endl;
} return 0;
}

上述代码,提交可以通过.

【hdoj_1753】大明A+B(大数)的更多相关文章

  1. HDU中大数实现的题目,持续更新(JAVA实现)

    HDU1002:大数加法,PE了N次 import java.util.Scanner; import java.math.*; public class Main { public static v ...

  2. 大明A+B(hdu1753)大数,java

    大明A+B Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...

  3. [HDOJ] 1753.大明A+B (大数加法)

    Problem Description 话说,经过了漫长的一个多月,小明已经成长了许多,所以他改了一个名字叫"大明". 这时他已经不是那个只会做100以内加法的那个"小明 ...

  4. (大数 小数点) 大明A+B hdu1753

    大明A+B Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  5. 大明A+B(大数相加)解题报告

    Problem Description 话说,经过了漫长的一个多月,小明已经成长了许多,所以他改了一个名字叫"大明". 这时他已经不是那个只会做100以内加法的那个"小明 ...

  6. HDUOJ-------1753大明A+B(大数之小数加法)

    大明A+B Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  7. hdu 1753 大明A+B(大数)

    题意:小数大数加法 思路:大数模板 #include<iostream> #include<stdio.h> #include<string.h> using na ...

  8. hdu 1753 大明A+B(高精度小数加法)

    //深刻认识到自己的粗心,为此浪费了一天.. Problem Description 话说,经过了漫长的一个多月,小明已经成长了许多,所以他改了一个名字叫"大明". 这时他已经不是 ...

  9. 大数问题,通常用JAVA

    e.g. HDU1002 简单加法 import java.math.BigInteger; import java.util.Scanner; public class Main { public ...

随机推荐

  1. bzoj2314: 士兵的放置(树形DP)

    0表示被父亲控制,1表示被儿子控制,2表示被自己控制.f表示最少士兵数,g表示方案数. 转移贼难写,写了好久之后写不下去了,看了一眼题解,学习了...原来还可以这么搞 比如求f[i][1]的时候,要在 ...

  2. 【bzoj2893】征服王

    Portal -->bzoj2893 Descripiton 给你一个\(n\)个点\(m\)条边的有向图,有一些点是起始点,有一些点是终止点,一次操作可以从一个起始点开始沿着有向图的边走到一个 ...

  3. 同时装了Python3和Python2,怎么用pip?

    问题:同时装了Python3和Python2,怎么用pip? Ubuntu13.04, 系统内同时装了Python3.3 和 2.7 用sudo apt-get install python-pip ...

  4. Git config配置

    git获取帮助git help config git config --help man git-config   git config --global user.name "fuleyi ...

  5. springboot+spring session+redis+nginx实现session共享和负载均衡

    环境 centos7. jdk1.8.nginx.redis.springboot 1.5.8.RELEASE session共享 添加spring session和redis依赖 <depen ...

  6. JS-this的用法

    o.onclick=function(){alert(this)}//这个this是指o ------ var arr=[1,2,3,4,5]; arr.a=12; arr.show=function ...

  7. logstash 收集 IIS 日志实践

    IIS日志示例: 2017-02-20 00:55:40 127.0.0.1 GET /MkWebAPI/swagger/ui/index - 80 - 127.0.0.1 Mozilla/5.0+( ...

  8. lazyload support for Zepto.js

    关于lazyload,很久之前整理过它的文档:<Lazy Load(1.7.0)中文文档 -- 延迟加载图片的jQuery插件> 因为懒,所以才要用lazyload.但lazyload用了 ...

  9. koa源码阅读[3]-koa-send与它的衍生(static)

    koa源码阅读的第四篇,涉及到向接口请求方提供文件数据. 第一篇:koa源码阅读-0第二篇:koa源码阅读-1-koa与koa-compose第三篇:koa源码阅读-2-koa-router 处理静态 ...

  10. HMM的概述(五个基本元素、两个假设、三个解决的问题)

    一.五个基本元素 HMM是个五元组 λ =( S, O , π ,A,B) S:状态值集合,O:观察值集合,π:初始化概率,A:状态转移概率矩阵,B:给定状态下,观察值概率矩阵   二.两个假设 HM ...