ACM1753_link

这道题利用了大数相加,但是需要将小数和整数部分分开,独立相加,然后组合成一个数;

数据的可能性:

1.两个整数相加,没有小数点

2.一个整数一个小数相加

3.两个小数相加

要对上面三种可能性进行分别处理

两个整数相加:存放在数组partone[N],parttwo[N]中,将答案存放在result数组中,用下面代码就可以完成

 int t=;
for(int i=;i<maxn;i++)
{
t=partone[i]+parttwo[i]+t;//整数在数组里逆序排放,方便进位
resultone[i]=t%;
t=t/;
}

一个整数和一个小数相加,然后小数部分的字符串子串不需要加法处理,将小数部分取出判断里面是否全为零并且把字符串后面的零全部去掉就可以了,然后只进行整数部分相加,按照上面的过程进行就行

两个小数相加,将整数部分和小数部分都取出分别存放到四个数组中,然后进行小数相加和整数相加,然后判断组合就可以了。

以下为全部代码:

#include<iostream>
#include<cstring>
using namespace std;
const int maxn=;
bool flag;
int partone[maxn],parttwo[maxn],partthree[maxn],partfour[maxn];
int resultone[maxn],resulttwo[maxn];
//第一个数的整数部分 ,第二个数的整数部分,第一个数的小数部分,第二个数的小数部分
//整数部分的计算结果,小数部分的计算结果
void init()//初始化各数组
{
flag=false;//如果是两个小数,标记是否会出现小数相加进位到个位的情况
memset(partone,,sizeof(partone));
memset(parttwo,,sizeof(parttwo));
memset(partthree,,sizeof(partthree));
memset(partfour,,sizeof(partfour));
memset(resultone,,sizeof(resultone));
memset(resulttwo,,sizeof(resulttwo));
}
void ForResultone()//partone and parttwo
{
int t=;
for(int i=;i<maxn;i++)
{
t=partone[i]+parttwo[i]+t;//整数在数组里逆序排放,方便进位
resultone[i]=t%;
t=t/;
}
}
void ForResulttwo()//partthree and partfour
{
int t=;
for(int i=maxn-;i>=;i--)
{
t=partfour[i]+partthree[i]+t;//小数部分在数组里是正序排放,从最后一个元素开始相加
resulttwo[i]=t%;
t=t/;
}
if(t>)//小数部分相加进位到个位的情况
flag=true;
}
void invert(char *s)
{
int len=strlen(s);
char c;
for(int i=;i<len/;i++)
{
c=s[i];
s[i]=s[len-i-];
s[len-i-]=c;
}
}
int main()
{
char parts[maxn],parti[maxn];
while(scanf("%s %s",parts,parti)!=EOF)
{
init();
//if there are two integers
if(strchr(parts,'.')==NULL&&strchr(parti,'.')==NULL)
{
int temp=strlen(parts);
for(int i=temp-;i>=;i--)
{
partone[temp-i-]=parts[i]-'';
}
int temp2=strlen(parti);
for(int i=temp2-;i>=;i--)
{
parttwo[temp2-i-]=parti[i]-'';
}
//上面分别把两个字符串中的整数存放到数组中,然后再下面的函数中相加
ForResultone();
int re=;
for(int i=maxn-;i>=;i--)//把相加得到的结果的前面的零全部去掉
if(resultone[i])
{
re=i;
break;
}
for(;re>=;re--)
{
printf("%d",resultone[re]);
}
printf("\n");
continue;
}
//if one of them is integer while another is float number
else if(strchr(parts,'.')==NULL||strchr(parti,'.')==NULL)
{
char *re1,*re2;//re1 has the point
//让re1代表有小数的字符串,re2代表整数字符串
if(strchr(parts,'.')!=NULL)
{
re1=parts;
re2=parti;
}
else
{
re1=parti;
re2=parts;
}
char *last=strchr(re1,'.');last++;//用last标记小数部分的字符串
int ll=strlen(last);ll--;
while(ll>=&&last[ll]=='')
{
ll--;
}//去掉小数部分后面所有的零 ,如果全是零ll会小于零
int lre=strlen(re1);
lre--;
while(re1[lre]!='.')//找整个字符串中小数点的位置
{
lre--;
}
lre--;
for(int i=;lre>=;lre--,i++)//将re1的整数部分存放到数组中
{
partone[i]=re1[lre]-'';
}
int lre2=strlen(re2);lre2--;
for(int i=;lre2>=;lre2--,i++ )//将re2存放到数组中
{
parttwo[i]=re2[lre2]-'';
}
ForResultone();
int re=;
for(int i=maxn-;i>=;i--)
if(resultone[i])
{
re=i;
break;
}
for(;re>=;re--)
{
printf("%d",resultone[re]);
}
if(ll>=)
{
printf(".");
for(int i=;i<=ll;i++)
printf("%c",last[i]);
}
printf("\n");
continue;
}
//two float numbers
char *last1=strchr(parts,'.');last1++;//取小数部分
char *last2=strchr(parti,'.');last2++;
int len1=strlen(parts);len1--;
int len2=strlen(parti);len2--;
int len3=strlen(last1);
int len4=strlen(last2);
for(int i=;i<len3;i++)
partthree[i]=last1[i]-'';
for(int i=;i<len4;i++)
partfour[i]=last2[i]-'';//把小数部分存放到数组中
ForResulttwo();
int sign=maxn-;
while(sign>=&&resulttwo[sign]==)//去掉小数部分相加后后面的零,如果全为零sign小于零
sign--;
int for1=len1-len3-;//取整数部分的长度
int for2=len2-len4-;
for(int i=;for1>=;for1--,i++)
partone[i]=parts[for1]-'';
for(int i=;for2>=;for2--,i++)
parttwo[i]=parti[for2]-'';
if(flag)partone[]+=;//如果小数部分相加后进位
ForResultone();
int re=;
for(int i=maxn-;i>=;i--)
if(resultone[i])
{
re=i;
break;
}
for(;re>=;re--)
{
printf("%d",resultone[re]);
}
if(sign>=)//如果有小数部分
{
printf(".");
for(int i=;i<=sign;i++)
printf("%d",resulttwo[i]);
}
printf("\n");
}
return ;
}

这个题目是足够的麻烦,思路要清晰,耐心要足够。

ACM1753大明A+B的更多相关文章

  1. TCP/IP之大明内阁---协议的制定

    个人感言:真正的知识是深入浅出的,码农翻身" 公共号将苦涩难懂的计算机知识,用形象有趣的生活中实例呈现给我们,让我们更好地理解.感谢"码农翻身" 公共号,感谢你们的成果, ...

  2. TCP/IP 之大明王朝邮差

    本系列文章全部摘选自"码农翻身"公众号,仅供个人学习和分享之用.文章会给出原文的链接地址,希望不会涉及到版权问题. 个人感言:真正的知识是深入浅出的,码农翻身" 公共号将 ...

  3. TCP/IP之大明王朝邮差

    一位大神的精华之作,原创2016-05-12 刘欣 来自码农翻身! 时间: 大明王朝天启四年, 清晨. 天色刚蒙蒙亮,我就赶着装满货物的马车来到了南城门,这里是集中处理货物的地方,一队一队的马车都来到 ...

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

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

  5. 大明A+B

    大明A+B 时间限制: 1 Sec  内存限制: 32 MB 以内加法的那个"小明"了,现在他甚至会任意长度的正小数的加法.现在,给你两个正的小数A和B,你的任务是代表大明计算出A ...

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

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

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

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

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

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

  9. TCP/IP之大明内阁 转

    原创: 刘欣 码农翻身 2016-11-02 本文是<TCP/IP之大明王朝邮差>的前传,  讲一讲大明内阁的各位大人是怎么设计TCP/IP网络的.大明天启年间,  明熹宗朱由校醉心于木工 ...

随机推荐

  1. [SHELL]linux环境变量

  2. RSA算法笔记+理解

    明天网络安全考试了,看了一下午,还没理解透,持续更新... 质数: 除了1和它本身以外不再有其他因素的数互质关系: 两个正整数,除了1以外,没有其他公因子RSA实现了非对称加密DES实现了对称加密** ...

  3. NHibernate3快速上手教程FluentNHibernate配置与DBHelper(已过期,有更好的)

    很多学习NHibernate的新手很容易卡在配置文件这一关,正所谓万事开头难,上手后再配合官方文档就比较容易了. 网上关于配置文件的资料非常多,但由于版本的问题,许多老的教程中都没有明确指出类库的版本 ...

  4. "Generative Adversarial Nets" Notes

    - Ian J.Goodfellow 中文翻译:https://blog.csdn.net/wspba/article/details/54577236 代码实现:https://github.com ...

  5. 八:The YARN Timeline Server

    一.Overview 介绍     yarn timeline server用于存储和检查应用程序过去和现在的信息(比如job history server).有两个功能: 1.Persisting ...

  6. canvas学习(一):线条,图像变换和状态保存

    canvas学习(一):线条,图像变换和状态保存 一:绘制一条线段: var canvas = document.getElementById('canvas') var ctx = canvas.g ...

  7. iOS-JS调用OC代码

    监听时间点击 改变当前浏览器窗口地址 在js里调用OC代码,需要在网页上写一个协议,不是http协议 然后在OC的webView shouldStartloadWithRequest

  8. 安装配置erlang_db_driver

    erlang-db-driver是北京融易通公司开源的一个erlang支持众多数据库的一个驱动类库,据其wiki介绍,其支持MySQL, Oracle, Sybase, DB2 and Informi ...

  9. 【week2】 词频统计第一次更新

    词频统计: 对每个功能预计时间: 功能 预计(min) 实际(min) 数据流读入 20 40 正则规范字符串 15 20 排序 30 45 输出 20 30 其他   25 词频统计psp 日期 类 ...

  10. week1 四人小组项目

    小组名称:nice! 项目组长:李权 组员:于淼 刘芳芳 杨柳 项目选题:东北师范大学论坛 作为东北师范大学同学间的信息交流平台,要满足的需求如下: 1.校内信息及公告 2.毕业生招聘信息 3.课程查 ...