标题信息: 手动求大的实数在一起,

pid=1753">http://acm.hdu.edu.cn/showproblem.php?pid=1753

AC代码:

/**

 *大实数相加,以小数点为分界,模拟加法运算,最后合并

 */

#include<iostream>

#include<string>

#include<algorithm>

using namespace std;

string add(string s1,string s2){//字符串模拟大整数加法,模拟结果有前导0

    int i,j,len1,len2;

    len1=s1.size(); len2=s2.size();

    //寻找小数点的位置

    for(i=0;s1[i]!='.'&&i<len1;i++);

    for(j=0;s2[j]!='.'&&j<len2;j++);

    //cout<<i<<" "<<j<<endl;

    string s,ss;

    int flag=0;

    //模拟小数点后面的数相加

    len1--; len2--;

    while(len1-i>len2-j){

        int sum=flag+(s1[len1--]-'0');

        s+=char ((sum)%10+'0');

        flag=sum/10;

    }

    //cout<<s<<endl;

    while(len2-j>len1-i){

        int sum=flag+(s2[len2--]-'0');

        s+=char ((sum)%10+'0');

        flag=sum/10;

    }

    //使小数点后位数对齐之后相加

    int len11,len22;

    if(len1-i>len2-j){

       len11=len1-((len1-i)-(len2-j));

       len22=len2;

    }

    else{

        len22=len2-((len2-j)-(len1-i));

        len11=len1;

    }

    while(len11>i&&len22>j){

        int sum=flag+(s1[len11--]-'0')+(s2[len22--]-'0');

        s+=char ((sum)%10+'0');

        flag=sum/10;

    }

    /**迭代器去除字符’0‘

    while(len11>i){

        int sum=flag+(s1[len11--]-'0');

        s+=char ((sum)%10+'0');

        flag=sum/10;

    }

    while(len22>j){

        int sum=flag+(s2[len22--]-'0');

        s+=char ((sum)%10+'0');

        flag=sum/10;

    }

    string::iterator it;//定义方向迭代器

    for(it=s.begin();*it=='0'&&it!=s.end();it++){//去掉s的前缀0,即小数后的0

        s.erase(it);

    }**/

    //cout<<s<<endl;

    string ss0;//用ss0去掉前导0

    int kk;

    for(kk=0;kk<s.size()&&(s[kk]=='0'||s[kk]=='.');kk++);

    for(int k=kk;k<s.size();k++) ss0+=s[k];

    //cout<<ss0<<endl;

    for(int i=0;i<ss0.size()/2;i++){

        char c=ss0[i];

        ss0[i]=ss0[ss0.size()-i-1];

        ss0[ss0.size()-i-1]=c;

    }

    //模拟小数点前面的数相加

    len1=i-1; len2=j-1;

    while(len1>-1&&len2>-1){

        int sum=flag+(s1[len1--]-'0')+(s2[len2--]-'0');

        ss+=char ((sum)%10+'0');

        flag=sum/10;

    }

    while(len1>-1){

        int sum=flag+(s1[len1--]-'0');

        ss+=char ((sum)%10+'0');

        flag=sum/10;

    }

    while(len2>-1){

        int sum=flag+(s2[len2--]-'0');

        ss+=char ((sum)%10+'0');

        flag=sum/10;

    }

    if(flag) ss+=char ('0'+flag);

    //cout<<s<<endl;

    for(int i=0;i<ss.size()/2;i++){

        char c=ss[i];

        ss[i]=ss[ss.size()-i-1];

        ss[ss.size()-i-1]=c;

    }

    //cout<<ss<<endl;

    if(!ss0.empty()&&ss0[0]!='.') ss=ss+'.'+ss0;

    if(!ss0.empty()&&ss0[0]=='.') ss=ss+ss0;

    return ss;

}

int main()

{

    string s1,s2;

    while(cin>>s1>>s2){

        cout<<add(s1,s2)<<endl;

    }

    return 0;

}

版权声明:本文博主原创文章,博客,未经同意不得转载。

hdu1753()模拟大型实景数字相加的更多相关文章

  1. pat(A) 2-06. 数列求和(模拟摆竖式相加)

    1.链接:http://www.patest.cn/contests/ds/2-06 2.思路:模拟摆竖式相加,因为同样位置上的数字同样,那么同一位上的加法就能够用乘法来表示 3.代码: #inclu ...

  2. [LeetCode] Add Two Numbers 两个数字相加

    You are given two linked lists representing two non-negative numbers. The digits are stored in rever ...

  3. [CareerCup] 2.5 Add Two Numbers 两个数字相加

    2.5 You have two numbers represented by a linked list, where each node contains a single digit. The ...

  4. 用字符串模拟两个大数相加——java实现

    问题: 大数相加不能直接使用基本的int类型,因为int可以表示的整数有限,不能满足大数的要求.可以使用字符串来表示大数,模拟大数相加的过程. 思路: 1.反转两个字符串,便于从低位到高位相加和最高位 ...

  5. js “+” 连接字符串&数字相加 数字相加出现多位小数 函数调用单引号双引号嵌套和转义字符的使用

    一.机制 JavaScript中,加号不仅表示相加还表示字符串连接 当加号两边存在字符串时,加号代表连接,实际上是将两侧都转为了字符串,如 "1" + 1 = "11&q ...

  6. 【CJOJ P1957】【NOIP2010冲刺十模拟赛】数字积木

    [NOIP2010冲刺十模拟赛]数字积木 Description 小明有一款新式积木,每个积木上都有一个数,一天小明突发奇想,要是把所有的积木排成一排,所形成的数目最大是多少呢? 你的任务就是读入n个 ...

  7. 给定一个整数,求解该整数最少能用多少个Fib数字相加得到

    一,问题描述 给定一个整数N,求解该整数最少能用多少个Fib数字相加得到 Fib数列,就是如: 1,1,2,3,5,8,13.... Fib数列,满足条件:Fib(n)=Fib(n-1)+Fib(n- ...

  8. jquery开发的数字相加游戏(你能玩几分)

    jquery开发的数字相加游戏,我在一轮中玩了632分(如下图),你能玩几分,哈哈... 我要试一试 下面贡献下这款“数字相加游戏”的开发过程. html部分: <div class=" ...

  9. JQuery变量数字相加的研究

    在 jquery中,一个变量和一个数字相加,期望得到1+2=3但是: eg: <input type="text" class="input_Num" i ...

随机推荐

  1. MP3文件结构及解码概述

    MP3文件结构概述 Layer-3音频文件.MPEG(MovingPicture Experts Group)在汉语中译为活动图像专家组,特指活动影音压缩标准,MPEG音频文件是MPEG1标准中的声音 ...

  2. [Spring入门学习笔记][静态资源]

    遗留问题 在上一节课的作业中,我们一定遇到了一点问题——虽然将页面内容正确的返回给了浏览器,但是浏览器显示的样式却是不正确的,这是因为在HTML的\标签中我们这样引入了CSS资源: <link ...

  3. [HeadFirst-HTMLCSS学习笔记][第十二章HTML5标记]

    考虑HTML结构 HTML5即是把原来<div>换成一些更特定的元素.能够更明确指示包含什么内容. (页眉,导航,页脚,文章) article nav 导航 header footer t ...

  4. 面试前的准备---C#知识点回顾----04

    播下的种子,慢慢开始发芽收获了,陆陆续续offer就来了,该轮到我挑的时候了 今天面试的一家公司,技术问的相对宽广和细致,程度令人发指 1.谈谈ViewState 这个问题,回答的好,工资翻一级 基本 ...

  5. (转载)Windows下手动完全卸载Oracle

    使用Oracle自带的Universal Installer卸载存在问题: 不干净,不完全,还有一些注册表残留,会影响到后来的安装. 所以,推荐使用手工卸载Oracle. 1.[win+R]-> ...

  6. oracle11gr2 netca 无法启动 报错

    安装oracle软件后,必须要先配置listener才能dbca建库,但是netca却报下面的错误. Oracle Net Services Configuration: # # An unexpec ...

  7. 1207.1——C语言 函数

    函数可以分为无参函数和有参函数. 无参函数的定义 无参函数定义的一般形式如下:返回值类型  函数名(){    函数体} 说明: 返回值类型可以是C语言中的任意数据类型. 函数名是标识符的一种,命名规 ...

  8. ios 调用相机后 view 下沉问题

    我只加了一句代码 现在不报错了  因为这个问题是随机性的  我也不太明白这个地方是怎么回事   我只是这样子做了  问题不出来了 if ([[[UIDevice currentDevice] syst ...

  9. protobuf 参考资料

    Protocol Buffers 官网下载地址:https://developers.google.com/protocol-buffers/docs/downloads Protocol Buffe ...

  10. Python学习笔记4(函数与模块)

    1.Python程序的结构 Python的程序由包(package).模块(module)和函数组成. 模块是处理一类问题的集合,由函数和类组成. 包是由一系列模块组成的集合.包是一个完成特定任务的工 ...