hdu1753()模拟大型实景数字相加
标题信息: 手动求大的实数在一起,
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()模拟大型实景数字相加的更多相关文章
- pat(A) 2-06. 数列求和(模拟摆竖式相加)
1.链接:http://www.patest.cn/contests/ds/2-06 2.思路:模拟摆竖式相加,因为同样位置上的数字同样,那么同一位上的加法就能够用乘法来表示 3.代码: #inclu ...
- [LeetCode] Add Two Numbers 两个数字相加
You are given two linked lists representing two non-negative numbers. The digits are stored in rever ...
- [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 ...
- 用字符串模拟两个大数相加——java实现
问题: 大数相加不能直接使用基本的int类型,因为int可以表示的整数有限,不能满足大数的要求.可以使用字符串来表示大数,模拟大数相加的过程. 思路: 1.反转两个字符串,便于从低位到高位相加和最高位 ...
- js “+” 连接字符串&数字相加 数字相加出现多位小数 函数调用单引号双引号嵌套和转义字符的使用
一.机制 JavaScript中,加号不仅表示相加还表示字符串连接 当加号两边存在字符串时,加号代表连接,实际上是将两侧都转为了字符串,如 "1" + 1 = "11&q ...
- 【CJOJ P1957】【NOIP2010冲刺十模拟赛】数字积木
[NOIP2010冲刺十模拟赛]数字积木 Description 小明有一款新式积木,每个积木上都有一个数,一天小明突发奇想,要是把所有的积木排成一排,所形成的数目最大是多少呢? 你的任务就是读入n个 ...
- 给定一个整数,求解该整数最少能用多少个Fib数字相加得到
一,问题描述 给定一个整数N,求解该整数最少能用多少个Fib数字相加得到 Fib数列,就是如: 1,1,2,3,5,8,13.... Fib数列,满足条件:Fib(n)=Fib(n-1)+Fib(n- ...
- jquery开发的数字相加游戏(你能玩几分)
jquery开发的数字相加游戏,我在一轮中玩了632分(如下图),你能玩几分,哈哈... 我要试一试 下面贡献下这款“数字相加游戏”的开发过程. html部分: <div class=" ...
- JQuery变量数字相加的研究
在 jquery中,一个变量和一个数字相加,期望得到1+2=3但是: eg: <input type="text" class="input_Num" i ...
随机推荐
- 开源 免费 java CMS - FreeCMS2.0 会员我的评论
项目地址:http://www.freeteam.cn/ 我的评论 从左側管理菜单点击我的评论进入. 在这里能够查看当前登录会员的全部评论记录. 删除评论 选择评论然后点击删除button能够完毕删除 ...
- 计划任务中使用NT AUTHORITY\SYSTEM用户和普通管理员用户有什么差别
原文地址:http://www.ynufe.edu.cn/metc/Article/ShowArticle.asp?ArticleID=805 系统管理员会碰到这种问题,为什么在更改系统登录用户pas ...
- oracle数据库recover和restore的区别
restore just copy the physical file, recover will consistent the database.restore 是还原,文件级的恢复.就是物理文件还 ...
- IE下使用jquery ajax失效
ie是根据请求的url是不是一样来是否发送请求,对于同一请求,ie只发送一次http请求,得到缓存之后就不再请求,所以同一请求发送多次,但ie实际是不会发送的 在你的第二次请求之前 使用 $.ajax ...
- ios禁用多按钮同时点下的效果
只需要把那些不能同时点下的按钮或者视图设置一下即可. [view setExclusiveTouch:YES]; 避免view上多个button同时按下,则可设置每个button的setExclusi ...
- iOS应用拨打电话
方法一: 特点: 直接拨打, 不弹出提示. 并且, 拨打完以后, 留在通讯录中, 不返回到原来的应用. //拨打电话 - (void)callPhone:(NSString *)phoneNumber ...
- (转) ROS NAMING AND NAMESPACES
原文地址:http://nootrix.com/2013/08/ros-namespaces/ In this tutorial, we will be talking about ROS nam ...
- activiti笔记四 关于部署信息表act_re_deployment
一.简要描述 部署流程定义时需要被持久化保存下来的信息.二.表结构说明 字段名称 字段描述 数据类型 主键 为空 取值说明 ID_ ID_ nvarchar(64) √ 主键ID NAME_ 部署名称 ...
- jquery append 动态添加的元素事件on 不起作用问题的解决
on方法中要先找到原选择器(如例.info),再找到动态添加的选择器(如列.delete). 不多说看成功代码(注意加粗加色): <!DOCTYPE html PUBLIC "-//W ...
- FastJSON 简单使用
FastJSON是一个Java语言编写的高性能,功能完善,完全支持http://json.org的标准的JSON库.多了不说了,百度一下一大把. 在此,简单的总结一下自己用过,测试过的方法. 如果使用 ...