字串處理(c語言)
阿新 • • 發佈:2018-11-29
[提交] [統計] [提問]
題目描述
讀入兩個字串,字串除了數字還可能包括 ‘—’、‘E’、‘e’、’.’,相加之後輸出結果,如果是浮點型,要求用科學計數法表示(最多包含10個有效數字)。
輸入描述
輸入包含多組測試資料。
每組輸入佔兩行,每行一個字串,測試資料保證字串的構成嚴格按照題目中的描述。
輸出描述
輸出兩個數字相加的結果,每組輸出佔一行。
輸入樣例
34.56
2.45e2
輸出樣例
2.7956e2
#include <stdio.h> #include <malloc.h> #include <string.h> #include <stdlib.h> #include <math.h> char str1[100],str2[100]; int main() { long long s,s1,s2,ans; int a1,a2,a,b,c,w,flag,i; int h1, h2; while(~scanf("%s %s",str1,str2)) { h1 = strlen(str1); h2 = strlen(str2); s1=0; s2=0; flag=0; b=0; c=0; a1=0; for(i=0; i < h1; i++) { if(str1[i]=='-') flag=1; else if(str1[i]=='.') c=1; else if(str1[i]=='e'||str1[i]=='E') { sscanf(str1+i+1,"%d",&b); a1+=b; break; } else { s1=s1*10+str1[i]-'0'; a1-=c; } } if(flag) s1=-s1; flag=0; b=0; c=0; a2=0; for(i=0; i < h2; i++) { if(str2[i]=='-') flag=1; else if(str2[i]=='.') c=1; else if(str2[i]=='e'||str2[i]=='E') { sscanf(str2+i+1,"%d",&b); a2+=b; break; } else { s2=s2*10+str2[i]-'0'; a2-=c; } } if(flag) s2=-s2; if(a1<a2) { while(a1<a2) { s2*=10; a2--; } } else if(a1>a2) { while(a1>a2) { s1*=10; a1--; } } a=a1; s=s1+s2; if(!s) { printf("0\n"); continue; } while(a<0&&s%10==0) { s/=10; a++; } if(a>=0) { printf("%lld",s); for(int i=0; i<a; i++) printf("0"); puts(""); continue; } flag=0; if(s<0) { s=-s; flag=1; } ans=1,w=0; while(ans<=s) { ans*=10; w++; } if(ans>1) { ans/=10; w--; } if(flag) printf("-"); printf("%lld",s/ans); if(ans>1) printf(".%lld",s%ans); printf("e%d\n",a+w); } return 0; }