【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 ...
随机推荐
- 原生JS---3
原生js学习笔记3——数组 定义数组 两种方式定义一个数组: 1. var array1 = new array(1, 2, 3, 4); 2. var array2 = [1, 2, 3, 4]; ...
- day-05 python函数
# #-*- coding:utf-8 -*-# 1:编写一个名为 make_shirt()的函数,它接受一个尺码以及要印到 T 恤上的字样.这个函数应打印一个句子,概要地说明 T 恤的尺码和字样.d ...
- go之switch
switch 条件语句一 格式 switch initialization{ case v1: // do something case v2: // do something case v2: // ...
- Last-Modified If-Modified-Since ETag If-None-Match
Last-Modified.If-Modified-Since 有些数据随时都在变化. CNN.com 的主页经常几分钟就更新.另一方面,Google.com 的主页几个星期才更新一次 (当他们上传特 ...
- 2.0 Linux系统的安装之Fedora安装单系统(2)
2.0 Linux系统的安装之Fedora安装单系统(2) *Linux系统的安装之Fedora安装单系统 恐怕最好装的系统就是Linux系统了,或者与Windows并列.此篇教程为Fedora的单系 ...
- Android5.1关机充电界面尺寸修改
Android5.1关机充电界面尺寸修改 因为项目的屏幕尺寸和一般的手机屏幕不一样,因此关机充电界面在设备上运行后严重变形,就需要自己修改这个界面了,废话不多说了,开打开打! 首先要说明这里是以And ...
- oracle中sum求和问题
如列表所示:都是选填字段name age salary weight张三 18 20李四 17王五 21燕小六 15 22 sum(age+salar ...
- MongoDB安装使用教程
参考菜鸟教程:http://www.runoob.com/mongodb/mongodb-tutorial.html
- 安装完MongoDB后尝试mongod -dbpath命令为什么会一直卡在连接端口?
1.现象如下 Linux Windows 2.原因 其实,这不是卡住了,而是告诉我们.数据库已经启动,而且这个东东还不能关掉,关掉意味着数据库也关了.一开始我也是傻逼逼的在那等了一天,哎.... 3. ...
- 微软CRM4.0 页面表单和腾讯QQ在线整合
现在通过QQ和客户联系.洽谈业务及沟通感情的场合越来越多,在微软CRM表单上整合QQ可以方便的显示客户QQ在线状态,点击图标即可和客户进行QQ聊天. 客户在线状态: 客户离线状态: 输入QQ号码后即时 ...