Hdu 1753 大明A+B <高精度小数相加>
2012-08-07 00:00
399 查看
[b]题意:[/b]
很长很长的小数相加..
[b]思路:[/b]
用1000长的数组处理两个小数..前500存整数..后500存小数..然后相应位相加..
然后输出除去前导0和后面0的..
[b]Tips:[/b]
※ strchr(char *a, char c) 返回的是 a 字符数组中 c 字符的第一次出现的位置..返回的不是迭代器的位置..而是地址..
※ 主要就是对字符串的处理..要很小心阿..
※ 以字符数组的形式读入高精度小数..然后用他们 - ‘0’..把字符变成整数来处理..最后以整数方式输出..
[b]Code:[/b]
View Code
很长很长的小数相加..
[b]思路:[/b]
用1000长的数组处理两个小数..前500存整数..后500存小数..然后相应位相加..
然后输出除去前导0和后面0的..
[b]Tips:[/b]
※ strchr(char *a, char c) 返回的是 a 字符数组中 c 字符的第一次出现的位置..返回的不是迭代器的位置..而是地址..
※ 主要就是对字符串的处理..要很小心阿..
※ 以字符数组的形式读入高精度小数..然后用他们 - ‘0’..把字符变成整数来处理..最后以整数方式输出..
[b]Code:[/b]
View Code
#include <stdio.h> #include <cstring> #define Max 1010 #define clr(x) memset(x, 0, sizeof(x)) char str1[Max], str2[Max], ans[Max]; char tmp1[Max], tmp2[Max]; void Calculate() { int i, j, k; clr(tmp1), clr(tmp2), clr(ans); int len = strlen(str1); if(strchr(str1, '.') == NULL) k = len; else k = strchr(str1, '.') - str1;///--->>!!! for(i = k-1, j = 500; i >= 0; --i, ++j) tmp1[j] = str1[i]-'0'; for(i = k+1, j = 499; i < len; ++i, --j) tmp1[j] = str1[i]-'0'; len = strlen(str2); if(strchr(str2, '.') == NULL) k = len; else k = strchr(str2, '.') - str2; for(i = k-1, j = 500; i >= 0; --i, ++j) tmp2[j] = str2[i] - '0'; for(i = k+1, j = 499; i < len; ++i, --j) tmp2[j] = str2[i] - '0'; int tmpc = 0, tmps; for(i = 0; i < 1010; ++i){ tmps = tmp1[i]+tmp2[i]+tmpc; ans[i] = tmps%10; tmpc = tmps/10; } } void outPut() { int i, j; for(i = 1009; i > 500; --i) if(ans[i]) break; while(i >= 500) printf("%d", ans[i--]); for(j = 0; j < 500; ++j) if(ans[j]) break; if(j != 500){ printf("."); for(i = 499; i >= j; --i) printf("%d", ans[i]); } puts(""); } int main() { int i, j, k; while(scanf("%s %s", &str1, &str2) != EOF) { Calculate(); outPut(); } return 0; }
相关文章推荐
- hdu 1753 高精度小数相加
- 【HDU 1753 大明A+B】 高精度加法
- hdu 1753 Java 高精度处理 大明A+B
- Hdu 2100 Lovekey 模拟大数相加<进位转换..>
- hdu 1753 大明A+B 长小数相加
- hdu1753 大明A+B (java大数练习第二弹 高精度小数)
- hdu 1753 java 小数相加
- hdu 1753 大数相加(高精度)
- HDU-1753 大明A+B【大数相加】
- hdu 1753 大明A+B(高精度小数加法)
- hdu 1753 大明A+B(高精度小数加法)
- HDU1753—大明A+B(大正小数相加)
- hdu 1753 大明A+B (正小数相加)
- HDU 1753 小数的大数相加
- HDU 5241 - Friends <高精度 + Java>
- HDU 1753 大明A+B 大型小数
- HDU-1753 大明A+B【大数相加】
- poj1753,Flip Game,ArrayDeque<Node>
- el表达式保留两位小数、使用jstl <fmt:formatNumber>标签保留两位小数
- hdu 1753 坑爹的高精度