【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 ...
随机推荐
- 【POJ 2248】 Addition Chain
[题目链接] http://poj.org/problem?id=2248 [算法] 搜索剪枝 剪枝1 : 优化搜索顺序,从大到小枚举 剪枝2 : Ai + Aj可能相等,只需搜一次即可 剪枝3 : ...
- 【POJ 1964】 City Game
[题目链接] http://poj.org/problem?id=1964 [算法] 记f[i]表示第i行最多向上延伸的行数 然后,对于每一行,我们用单调栈计算出这一行向上延伸的最大矩形面积,取最大值 ...
- hdu 5823 color II —— 子集DP
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5823 看博客:http://www.cnblogs.com/SilverNebula/p/5929550. ...
- LA4788
贪心 这个贪心不太懂啊 dfs返回子树需要的最小值,然后按需要减消耗排序,然后贪心选取即可. #include<bits/stdc++.h> using namespace std; ty ...
- Node.js安全清单
前言 安全性,总是一个不可忽视的问题.许多人都承认这点,但是却很少有人真的认真地对待它.所以我们列出了这个清单,让你在将你的应用部署到生产环境来给千万用户使用之前,做一个安全检查. 以下列出的安全项, ...
- Doubles
http://poj.org/problem?id=1552 #include<stdio.h> ; int main() { int n,f[N],g[N]; int cnt; ) { ...
- A - Diverse Team
Problem description There are n students in a school class, the rating of the i-th student on Codeho ...
- (转)用JS实现表格中隔行显示不同颜色
用JS实现表格中隔行显示不同颜色 第一种: <style> tr{bgColor:expression( this.bgColor=((this.rowIndex)%2==0 )? ...
- postgreSQL中跨库查询在windows下的实现方法
以下是在postgreSQL 8.1版本中的实践,其他版本类似: 1.将C:\Program Files\PostgreSQL\8.1\share\contrib下的dblink.sql复制到C:\P ...
- 论 fmap、fmap fmap、与 fmap fmap fmap
https://blog.csdn.net/sinat_25226993/article/details/44415803