【ACM】hdu_zs1_1005_大明A+B _201307291603
大明A+B
Time Limit : 3000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 30 Accepted Submission(s) : 7
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
话说,经过了漫长的一个多月,小明已经成长了许多,所以他改了一个名字叫“大明”。
这时他已经不是那个只会做100以内加法的那个“小明”了,现在他甚至会任意长度的正小数的加法。
现在,给你两个正的小数A和B,你的任务是代表大明计算出A+B的值。
Input
本题目包含多组测试数据,请处理到文件结束。
每一组测试数据在一行里面包含两个长度不大于400的正小数A和B。
Output
请在一行里面输出输出A+B的值,请输出最简形式。详细要求请见Sample Output。
Sample Input
1.1 2.9
1.1111111111 2.3444323343
1 1.1
Sample Output
4
3.4555434454
2.1
Author
#include <stdio.h>
#include <string.h>
#define MAX_LEN 400
char str1[MAX_LEN+40];
char str2[MAX_LEN+40];
int an1[MAX_LEN+40];
int an2[MAX_LEN+40];
int an3[MAX_LEN+40];
int an4[MAX_LEN+40];
int main()
{
while(scanf("%s%s",str1,str2)!=EOF)
{
int i,j,k,len1,len2;
memset(an1,0,sizeof(an1));
memset(an2,0,sizeof(an2));
memset(an3,0,sizeof(an3));
memset(an4,0,sizeof(an4));
len1=strlen(str1);
for(i=0;(i<len1)&&(str1[i]!='.');i++);
k=i;
for(j=0,i=k-1;i>=0;i--)
an1[j++]=str1[i]-'0';
for(j=1,i=k+1;i<len1;i++)
an3[j++]=str1[i]-'0';
len2=strlen(str2);
for(i=0;(i<len2)&&(str2[i]!='.');i++);
k=i;
for(j=0,i=k-1;i>=0;i--)
an2[j++]=str2[i]-'0';
for(j=1,i=k+1;i<len2;i++)
an4[j++]=str2[i]-'0';
for(i=MAX_LEN-1;i>=0;i--)
{
an3[i]+=an4[i];
if(an3[i]>=10)
{
an3[i]-=10;
an3[i-1]++;
}
}
if(an3[0]>0)
an1[0]++;
for(i=0;i<MAX_LEN;i++)
{
an1[i]+=an2[i];
if(an1[i]>=10)
{
an1[i]-=10;
an1[i+1]++;
}
}
for(i=MAX_LEN;(i>0)&&(an1[i]==0);i--);
for(;i>=0;i--)
printf("%d",an1[i]);
for(i=MAX_LEN;(i>0)&&(an3[i]==0);i--);
if(i>=1) printf(".");
for(j=1;j<=i;j++)
printf("%d",an3[j]);
printf("\n");
}
return 0;
}
代码加注释
#include <stdio.h>
#include <string.h>
#define MAX_LEN 400
char str1[MAX_LEN+40];
char str2[MAX_LEN+40];
int an1[MAX_LEN+40];
int an2[MAX_LEN+40];
int an3[MAX_LEN+40];
int an4[MAX_LEN+40];
int main()
{
while(scanf("%s%s",str1,str2)!=EOF)
{
int i,j,k,len1,len2;
memset(an1,0,sizeof(an1));
memset(an2,0,sizeof(an2));
memset(an3,0,sizeof(an3));
memset(an4,0,sizeof(an4));
len1=strlen(str1);
for(i=0;(i<len1)&&(str1[i]!='.');i++);
k=i;//找出小数点的位置 ,并标记
for(j=0,i=k-1;i>=0;i--)
an1[j++]=str1[i]-'0';//处理整数部分
for(j=1,i=k+1;i<len1;i++)
an3[j++]=str1[i]-'0';//处理小数部分
len2=strlen(str2);
for(i=0;(i<len2)&&(str2[i]!='.');i++);
k=i;
for(j=0,i=k-1;i>=0;i--)
an2[j++]=str2[i]-'0';
for(j=1,i=k+1;i<len2;i++)
an4[j++]=str2[i]-'0';
for(i=MAX_LEN-1;i>=0;i--)
{
an3[i]+=an4[i];
if(an3[i]>=10)
{
an3[i]-=10;
an3[i-1]++;
}
}//小数部分相加
if(an3[0]>0)
an1[0]++;//小数部分是否要向整数部分进一
for(i=0;i<MAX_LEN;i++)
{
an1[i]+=an2[i];
if(an1[i]>=10)
{
an1[i]-=10;
an1[i+1]++;
}
}//整数部分相加
for(i=MAX_LEN;(i>0)&&(an1[i]==0);i--);
for(;i>=0;i--)
printf("%d",an1[i]);//输出整数部分
for(i=MAX_LEN;(i>0)&&(an3[i]==0);i--);
if(i>=1) printf(".");//如果有小数,则输出小数点,如果没有则不输出
for(j=1;j<=i;j++)
printf("%d",an3[j]);//输出整数部分
printf("\n");
}
return 0;
}
//如输入12.3和34.56,整数部分是21+43,然后倒着输出,小数部分是30+56,从最后的0一直加到最前面,然后正着输出
【ACM】hdu_zs1_1005_大明A+B _201307291603的更多相关文章
- ACM数论之旅11---浅谈指数与对数(长篇)(今天休息,不学太难的数论> 3<)
c/c++语言中,关于指数,对数的函数我也就知道那么多 exp(),pow(),sqrt(),log(),log10(), exp(x)就是计算e的x次方,sqrt(x)就是对x开根号 pow()函数 ...
- SCNU ACM 2016新生赛决赛 解题报告
新生初赛题目.解题思路.参考代码一览 A. 拒绝虐狗 Problem Description CZJ 去排队打饭的时候看到前面有几对情侣秀恩爱,作为单身狗的 CZJ 表示很难受. 现在给出一个字符串代 ...
- SCNU ACM 2016新生赛初赛 解题报告
新生初赛题目.解题思路.参考代码一览 1001. 无聊的日常 Problem Description 两位小朋友小A和小B无聊时玩了个游戏,在限定时间内说出一排数字,那边说出的数大就赢,你的工作是帮他 ...
- acm结束了
最后一场比赛打完了.之前为了记录一些题目,开了这个博客,现在结束了acm,这个博客之后也不再更新了. 大家继续加油!
- 关于ACM的总结
看了不少大神的退役帖,今天终于要本弱装一波逼祭奠一下我关于ACM的回忆. 从大二上开始接触到大三下结束,接近两年的时间,对于大神们来说两年的确算不上时间,然而对于本弱来说就是大学的一半时光.大一的懵懂 ...
- 第一届山东省ACM——Phone Number(java)
Description We know that if a phone number A is another phone number B’s prefix, B is not able to be ...
- 第一届山东省ACM——Balloons(java)
Description Both Saya and Kudo like balloons. One day, they heard that in the central park, there wi ...
- ACM之鸡血篇
一匹黑马的诞生 故事还要从南京现场赛讲起,话说这次现场赛,各路ACM英雄豪杰齐聚南京,为争取亚洲总舵南京分舵舵主之职位,都使出了看 家本领,其中有最有实力的有京城两大帮清华帮,北大帮,南郡三大派上交派 ...
- 【codeforces 415D】Mashmokh and ACM(普通dp)
[codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=200 ...
随机推荐
- OC常用的数学函数及宏定义
一.函数 1. 三角函数 double sin (double);正弦 double cos (double);余弦 double tan (double);正切 2 .反三角函数 double as ...
- JavaScript学习杂记
1.DOM层级:document(document) --> doctype,documentElement(html) --> head,body(body). 2.offset, cl ...
- windows 装XP系统
笔记本型号:HPCQ40-506AX 1.在BIOS中更改启动顺序:将USB设为第一启动项2.插入装有PE系统的USB设备3.开机后一直按F124.到达选择系统界面,目前我的HPCQ40用其他系统进去 ...
- Android MediaRecorder自定义分辨率
Android MediaRecorder自定义分辨率 工作这么久了,确实积累了不少东西,但都是以文档的形式存在U盘里的,为什么不写博客呢?因为懒啊!!!总感觉博客太难写了(大概是上学时候写作文恐惧症 ...
- VMWare linux安装mysql 5.7.13
1.基础环境说明 虚拟机:VMWare 操作系统:linux 数据库版本:mysql 5.7.13 社区版(别问为什么不装企业版,因为企业版要钱) 背景:虚拟机可以连上外网 下载目录: /tools/ ...
- SQL优化--使用 EXISTS 代替 IN 和 inner join来选择正确的执行计划
在使用Exists时,如果能正确使用,有时会提高查询速度: 1,使用Exists代替inner join 2,使用Exists代替 in 1,使用Exists代替inner join例子: 在一般写s ...
- HIVE 命令记录
HIVE 命令记录 设置hive运行的队列 hive> set mapreduce.job.queuename=ven12; 打印列名 hive> set hive.cli.print.h ...
- handyJson的技术内核
1.swift对象内存模型: 2.指针操作: 3.协议.泛型.扩展: 4.kvc: 1是所有实现的基础,没有内存对象(类)模型,后面的一切都我从谈起. 在1的基础上使用2进行对象模型信息的提取和转换. ...
- Jenkins 定时 构建项目
选择要定时构建的 项目-->配置-->构建触发器 触发项目: Poll SCM:定时检查源码变更(根据SCM软件的版本号),如果有更新就checkout最新code下来,然后执行构建动作. ...
- node jsonwebtoken
jsonwebtoken是node版本的JWT(JSON Web Tokens)的实现.1.什么是JWT?Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于J ...