http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1476
题目大意:
给你n串数字组成的字符串,要求输出他们相加的和。
如:n= 2
输入$1,123.45和$2,890.23要求输出$4,013.68
思路:
先存入字符数组,然后在转化为double,然后在用sprintf存进字符数组,然后判断是否要输出','输出即可
#include<cstdio> #include<cstring> const int MAXN=50; char a[MAXN]; int main() { int n; while(~scanf("%d",&n),n) { double ans=0; double temp; for(int i=0;i<n;i++) { temp=0; scanf("%s",a); int len=strlen(a); bool point=false; for(int j=1;j<len;j++) { if(a[j]==',') continue; if(a[j]=='.') { point=true; continue; } if(point) { if(j==len-2) temp+=(a[j]-'0')*0.1+(a[j+1]-'0')*0.01; else if(j==len-1) temp+=(a[j]-'0')*0.1; break; } else temp=temp*10+a[j]-'0'; } ans+=temp; } bool print_commas[MAXN]={0}; char res[MAXN]; sprintf(res,"%.2lf",ans); int id=strchr(res,'.')-res; for(int cnt=1;id>=0;id--) { if(cnt==3) { print_commas[id]=true; cnt=1; continue; } cnt++; } int len=strlen(res); printf("$"); for(int i=0;i<len;i++) { if( i!=0 &&print_commas[i+1]==true) //忘了i!=0的判断了- -||| printf(","); printf("%c",res[i]); } printf("\n"); } return 0; }