hdu 1753 大明A+B (正小数相加)
来源:互联网 发布:apache ant 1.9.4安装 编辑:程序博客网 时间:2024/04/29 23:13
链接:hdu 1753
Problem Description话说,经过了漫长的一个多月,小明已经成长了许多,所以他改了一个名字叫“大明”。
这时他已经不是那个只会做100以内加法的那个“小明”了,现在他甚至会任意长度的正小数的加法。
现在,给你两个正的小数A和B,你的任务是代表大明计算出A+B的值。
Input本题目包含多组测试数据,请处理到文件结束。
每一组测试数据在一行里面包含两个长度不大于400的正小数A和B。
Output请在一行里面输出输出A+B的值,请输出最简形式。详细要求请见Sample Output。
Sample Input1.1 2.91.1111111111 2.34443233431 1.1
Sample Output43.45554344542.1
模拟小数相加即可,可将其分为小数部分和整数部分两部分相加。
#include<stdio.h>#include<string.h>char s[410],t[410];int xsd(char s[],int n) //找小数点{ int i; for(i=0;i<n;i++) if(s[i]=='.') break; return i;}void add(char s1[],char s2[],int a1,int a2) //整数部分相加{ int i,j,k; if(a1>a2) k=a1-1; else k=a2-1; if(t[0]>'9'){ //当小数第一位要进位,应向整数个位进位 t[0]-=10; s[k]++; } for(i=a1-1,j=a2-1;i>=0||j>=0;i--,j--){ if(i>=0&&j>=0) s[k]+=s1[i]+s2[j]-48; else if(i>=0&&j<0) s[k]+=s1[i]; else if(i<0&&j>=0) s[k]+=s2[j]; if(s[k]>'9'&&k){ s[k]-=10; s[k-1]++; } k--; }}int main(){ int i,j,k,n,m,a1,a2; char s1[410],s2[410]; while(scanf("%s%s",s1,s2)!=EOF){ m=strlen(s1); n=strlen(s2); a1=xsd(s1,m); //确定小数位 a2=xsd(s2,n); memset(s,0,sizeof(s)); //清零 memset(t,0,sizeof(t)); k=0; for(i=a1+1,j=a2+1;i<m||j<n;i++,j++){ //小数部分相加 if(i<m&&j<n) t[k]+=s1[i]+s2[j]-48; else if(i>=m&&j<n) t[k]+=s2[j]; else if(j>=n&&i<m) t[k]+=s1[i]; k++; } for(i=k-1;i>=0;i--){ //小数部分进位处理 if(t[i]>'9'&&i){ t[i]-=10; t[i-1]++; } } add(s1,s2,a1,a2); if(s[0]>'9'){ s[0]-=10; printf("1"); } printf("%s",s); for(i=k-1;i>=0;i--) if(t[i]!='0') break; if(i!=-1){ printf("."); t[i+1]=0; printf("%s",t); } printf("\n"); } return 0;}
这时他已经不是那个只会做100以内加法的那个“小明”了,现在他甚至会任意长度的正小数的加法。
现在,给你两个正的小数A和B,你的任务是代表大明计算出A+B的值。
每一组测试数据在一行里面包含两个长度不大于400的正小数A和B。
1.1 2.91.1111111111 2.34443233431 1.1
43.45554344542.1
#include<stdio.h>#include<string.h>char s[410],t[410];int xsd(char s[],int n) //找小数点{ int i; for(i=0;i<n;i++) if(s[i]=='.') break; return i;}void add(char s1[],char s2[],int a1,int a2) //整数部分相加{ int i,j,k; if(a1>a2) k=a1-1; else k=a2-1; if(t[0]>'9'){ //当小数第一位要进位,应向整数个位进位 t[0]-=10; s[k]++; } for(i=a1-1,j=a2-1;i>=0||j>=0;i--,j--){ if(i>=0&&j>=0) s[k]+=s1[i]+s2[j]-48; else if(i>=0&&j<0) s[k]+=s1[i]; else if(i<0&&j>=0) s[k]+=s2[j]; if(s[k]>'9'&&k){ s[k]-=10; s[k-1]++; } k--; }}int main(){ int i,j,k,n,m,a1,a2; char s1[410],s2[410]; while(scanf("%s%s",s1,s2)!=EOF){ m=strlen(s1); n=strlen(s2); a1=xsd(s1,m); //确定小数位 a2=xsd(s2,n); memset(s,0,sizeof(s)); //清零 memset(t,0,sizeof(t)); k=0; for(i=a1+1,j=a2+1;i<m||j<n;i++,j++){ //小数部分相加 if(i<m&&j<n) t[k]+=s1[i]+s2[j]-48; else if(i>=m&&j<n) t[k]+=s2[j]; else if(j>=n&&i<m) t[k]+=s1[i]; k++; } for(i=k-1;i>=0;i--){ //小数部分进位处理 if(t[i]>'9'&&i){ t[i]-=10; t[i-1]++; } } add(s1,s2,a1,a2); if(s[0]>'9'){ s[0]-=10; printf("1"); } printf("%s",s); for(i=k-1;i>=0;i--) if(t[i]!='0') break; if(i!=-1){ printf("."); t[i+1]=0; printf("%s",t); } printf("\n"); } return 0;}
0 0
- hdu 1753 大明A+B (正小数相加)
- hdu 1753 大明A+B 长小数相加
- HDU1753—大明A+B(大正小数相加)
- HDU-1753 大明A+B【大数相加】
- HDU-1753 大明A+B【大数相加】
- HDU-1753 大明A+B【大数相加】
- HDU 1753 大明A+B 大型小数
- HDU 1753大明A+B(大数相加)(string::npos)
- hdu 1753 大明A+B(高精度小数加法)
- 杭电ACM 1753 大明A+B(大数:正小数加法)
- 小数精度 1753 大明A+B
- HDU 1753 大明A+B
- hdu 1753 大明A+B
- hdu 1753 大明A+B
- HDU 1753 大明A+B
- hdu 1753 大明A+B
- hdu 1753 大明A+B
- HDU 1753 大明A+B
- mfxjtjejueshewrgwegtwegefagqgh呵呵人很好哇
- 线性规划与网络流24题之飞行员配对计划 二分图的最大匹配
- NYOJ-844 A+B Problem(V)
- leetcode:Populating Next Right Pointers in Each Node
- 如何查看oracle表空间已使用大小
- hdu 1753 大明A+B (正小数相加)
- 初衷
- gson对各种Java对象与json的转换的支持
- Object-C基本数据类型小结
- Scrapy在windows环境下的搭建
- 测试代码插件
- Hibernte基于泛型DAO设计
- VC6.0中OpenGL开发环境配置
- shell script中的case……esac判断