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 常用命令、基本用法总结

    Filter Filter 常用于从大量文本.数据中提取需求的部分.下面介绍几个常用的 filter 命令. cut $ cut -c 5-8 textfile.txt # 切出 textfile.t ...

  2. #pragma pack(n)对齐格式

    #pragma pack(n)对齐格式 #pragma pack(n) 是预处理器用来指定对齐格式的指令,表示n对齐.当元素字节小于n时,要扩展到n:若元素字节大于n则占用其实际大小. struct ...

  3. struts2 result type属性说明

    首先看一下在struts-default.xml中对于result-type的定义: <result-types><result-type name="chain" ...

  4. 单源最短路——dijkstra算法

    Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止. 问 ...

  5. 如何遍历一个文件夹(C语言实现)

    #include<io.h> #include<stdio.h> int main() { long Handle; struct _finddata_t FileInfo; ...

  6. Thunder团队第五周 - Scrum会议4

    Scrum会议4 小组名称:Thunder 项目名称:i阅app Scrum Master:李传康 工作照片: 邹双黛同学在拍照,所以不在照片内. 参会成员: 王航:http://www.cnblog ...

  7. Java学习个人备忘录之文档注释

    文档注释 单行注释用 // 多行注释有两种,第一种是 /* 内容 */,第二种是/** 内容 */. 这两种多行注释的区别是/** 内容 */这种注释可以生成一个该文件的注释文档,下面是演示代码. A ...

  8. Web后台任务处理

    文章:.NET Core开源组件:后台任务利器之Hangfire Hangfire官网介绍:在.NET和.NET Core应用程序中执行后台处理的简便方法.无需Windows服务或单独的过程. 以持久 ...

  9. LintCode-376.二叉树的路径和

    二叉树的路径和 给定一个二叉树,找出所有路径中各节点相加总和等于给定 目标值 的路径. 一个有效的路径,指的是从根节点到叶节点的路径. 样例 给定一个二叉树,和 目标值 = 5: 返回: [      ...

  10. YaoLingJump开发者日志(一)

      写完PokeCats之后意犹未尽,还想做一个更加有趣的游戏,比如说像超级玛丽那样.   游戏的主角就选"瑶玲"了,这是我小时候最喜欢的动画片<瑶玲啊瑶玲>的女主角. ...