zoj 2476 Total Amount(水~)

给你money数,小数点左边三位一个逗号那种,小数点后有且仅有两位小数。让你相加后输出。

 

由于 All amounts and the total amount are between $0.00 and $20,000,000.00

 

所以,我是将数转化为整数算的。用atoi,把非数字都去掉,正好20亿,不超整型,真好。然后相加。

 

开始WA了 = =。。。需要考虑如下情况,ans(即加和)小于10,ans加和在10和100之间。

 

由于我下面的处理是考虑至少三位数的,所以这两种情况特殊处理。

 

itoa不支持 = =。。。用了sprintf。

 

int sprintf(char *string,char *format[,argument,…])将字符串string 的内容重新写为格式化后的字符串

 

 

#include <stdio.h> #include <stdlib.h> #include <iostream> #include <string.h> #include <stack> #include <float.h> using namespace std; stack <char> s; int main() { int n,i,k,len,d; char str[20],to[20]; char ss[30]; int ans,tmp; while( scanf("%d",&n) != EOF && n ) { ans = 0; getchar(); for(i=0; i<n; i++) { gets(str); len = strlen(str); d = 0; for(k=1; k<len; k++) { if( isdigit( str[k] ) ) to[d++] = str[k]; } to[d] = '/0'; tmp = atoi(to); ans += tmp; } if( ans < 10 ) { printf("$0.0%d/n",ans); continue; } if( ans < 100 ) { printf("$0.%d/n",ans); continue; } sprintf(ss,"%d",ans); len = strlen(ss); s.push(ss[len-1]); s.push(ss[len-2]); s.push('.'); int k = 0; for(i=len-3; i>=0; i--) { k++; s.push(ss[i]); if( k % 3 == 0 && i ) s.push(','); } putchar('</p>); while( !s.empty() ) { printf("%c",s.top()); s.pop(); } printf("/n"); } return 0; }  

你可能感兴趣的:(c,String)