Hdu 1753 大明A+B 高精度小数相加
生活随笔
收集整理的這篇文章主要介紹了
Hdu 1753 大明A+B 高精度小数相加
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題意:
很長很長的小數相加..
思路:
用1000長的數組處理兩個小數..前500存整數..后500存小數..然后相應位相加..
然后輸出除去前導0和后面0的..
Tips:
※ strchr(char *a, char c) 返回的是 a 字符數組中 c 字符的第一次出現的位置..返回的不是迭代器的位置..而是地址..
※ 主要就是對字符串的處理..要很小心阿..
※ 以字符數組的形式讀入高精度小數..然后用他們 - ‘0’..把字符變成整數來處理..最后以整數方式輸出..
Code:
View Code 1 #include <stdio.h> 2 #include <cstring> 3 #define Max 1010 4 #define clr(x) memset(x, 0, sizeof(x)) 5 6 char str1[Max], str2[Max], ans[Max]; 7 char tmp1[Max], tmp2[Max]; 8 9 void Calculate() 10 { 11 int i, j, k; 12 clr(tmp1), clr(tmp2), clr(ans); 13 14 int len = strlen(str1); 15 if(strchr(str1, '.') == NULL) 16 k = len; 17 else 18 k = strchr(str1, '.') - str1;///--->>!!! 19 for(i = k-1, j = 500; i >= 0; --i, ++j) 20 tmp1[j] = str1[i]-'0'; 21 for(i = k+1, j = 499; i < len; ++i, --j) 22 tmp1[j] = str1[i]-'0'; 23 24 len = strlen(str2); 25 if(strchr(str2, '.') == NULL) 26 k = len; 27 else 28 k = strchr(str2, '.') - str2; 29 for(i = k-1, j = 500; i >= 0; --i, ++j) 30 tmp2[j] = str2[i] - '0'; 31 for(i = k+1, j = 499; i < len; ++i, --j) 32 tmp2[j] = str2[i] - '0'; 33 34 int tmpc = 0, tmps; 35 for(i = 0; i < 1010; ++i){ 36 tmps = tmp1[i]+tmp2[i]+tmpc; 37 ans[i] = tmps%10; 38 tmpc = tmps/10; 39 } 40 } 41 42 void outPut() 43 { 44 int i, j; 45 for(i = 1009; i > 500; --i) 46 if(ans[i]) break; 47 while(i >= 500) 48 printf("%d", ans[i--]); 49 for(j = 0; j < 500; ++j) 50 if(ans[j]) break; 51 if(j != 500){ 52 printf("."); 53 for(i = 499; i >= j; --i) 54 printf("%d", ans[i]); 55 } 56 puts(""); 57 } 58 59 int main() 60 { 61 int i, j, k; 62 while(scanf("%s %s", &str1, &str2) != EOF) 63 { 64 Calculate(); 65 outPut(); 66 } 67 return 0; 68 }?
?
?
轉載于:https://www.cnblogs.com/Griselda/archive/2012/08/07/2625948.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Hdu 1753 大明A+B 高精度小数相加的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: localStorage存、取数组
- 下一篇: poj 1236 Network of