九度1137解题报告
2014-02-28 13:30
169 查看
大神们说没有更简单的方法,于是还是用模拟加法。题目如下
http://ac.jobdu.com/problem.php?pid=1137
计算机里的浮点数加法,是先对阶,相加,然后规格化,类似地,在模拟的时候,我们也要对阶,即将输入的数分成小数部分和整数部分,然后相加,将结果输出。我将输入当做字符串处理,先超出两个数的小数点的位置,然后将小数部分对齐,即在较短的小数部分后面补零,然后相加,记下进位,再将整数部分对齐,不齐的高位补零,然后相加,记得算上小数的进位,以及去掉小数部分的末尾零,最后输出。代码如下:
http://ac.jobdu.com/problem.php?pid=1137
计算机里的浮点数加法,是先对阶,相加,然后规格化,类似地,在模拟的时候,我们也要对阶,即将输入的数分成小数部分和整数部分,然后相加,将结果输出。我将输入当做字符串处理,先超出两个数的小数点的位置,然后将小数部分对齐,即在较短的小数部分后面补零,然后相加,记下进位,再将整数部分对齐,不齐的高位补零,然后相加,记得算上小数的进位,以及去掉小数部分的末尾零,最后输出。代码如下:
#include <stdio.h> #include <string.h> char s1[101],s2[101]; int a[101],b[101],ans_d[101],ans_i[101]; int main() { int n; scanf("%d",&n); while (n--) { scanf("%s %s",s1,s2); int alen=strlen(s1), blen=strlen(s2); int ap,bp; for (int i=0;i<alen;++i) //求小数点的位置 if (s1[i]=='.') ap=i; for (int i=0;i<blen;++i) if (s2[i]=='.') bp=i; int ansp_len,asize=0,bsize=0; if (alen-ap>blen-bp) //将小数部分对齐 { ansp_len=alen-1-ap; for (int i=0;i<alen-ap-(blen-bp);++i) b[bsize++]=0; } else { ansp_len=blen-1-bp; for (int i=0;i<blen-bp-(alen-ap);++i) a[asize++]=0; } for (int i=alen-1;i>ap;--i) a[asize++]=s1[i]-'0'; for (int i=blen-1;i>bp;--i) b[bsize++]=s2[i]-'0'; int carry=0,temp; for (int i=0;i<ansp_len;++i) //小数部分相加 { temp=a[i]+b[i]+carry; ans_d[i]=temp%10; carry=temp/10; } int intlen; asize=bsize=0; for (int i=ap-1;i>=0;--i) //整数部分对齐 a[asize++]=s1[i]-'0'; for (int i=bp-1;i>=0;--i) b[bsize++]=s2[i]-'0'; if (ap>bp) { intlen=ap; for (int i=0;i<ap-bp;++i) b[bsize++]=0; } else { intlen=bp; for (int i=0;i<bp-ap;++i) a[asize++]=0; } for (int i=0;i<intlen;++i) //整数部分相加 { temp=a[i]+b[i]+carry; ans_i[i]=temp%10; carry=temp/10; } if (carry!=0) ans_i[intlen++]=carry; for (int i=intlen-1;i>=0;--i) printf("%d",ans_i[i]); printf("."); int end=0; while (ans_d[end]==0) ++end; //小数部分去尾零 for (int i=ansp_len-1;i>=end;--i) printf("%d",ans_d[i]); printf("\n"); } return 0; }
相关文章推荐
- 【九度OJ】题目1137:浮点数加法 解题报告
- 【九度OJ】题目1153:括号匹配问题 解题报告
- 【九度OJ】题目1047:素数判定 解题报告
- 【九度OJ】题目1205:N阶楼梯上楼问题 解题报告
- 九度OJ1099:后缀子串排序解题报告
- 九度OJ题目1081:递推数列解题报告
- 【九度】2014年王道论坛研究生机试练习赛第三场解题报告
- 九度1160解题报告
- 【九度】2014年王道论坛计算机考研机试全真模拟考试解题报告
- 【九度OJ】题目1202:排序 解题报告
- 【九度OJ】题目1078:二叉树遍历 解题报告
- 【九度OJ】题目1138:进制转换 解题报告
- 【九度OJ】题目1442:A sequence of numbers 解题报告
- 【九度OJ】题目1028:继续畅通工程 解题报告
- 【九度OJ】题目1169:比较奇偶数个数 解题报告
- 【九度OJ】题目1185:特殊排序 解题报告
- 【九度OJ】题目1194:八进制 解题报告
- 九度OJ1105字符串的反码解题报告
- 九度1084解题报告
- 九度OJ1442:A sequence of numbers 解题报告