ZOJ 2476 Total Amount Aの苦労.
3277 ワード
クリックしてリンクを開く
Total Amount
Time Limit: 2 Seconds
メモリLimit: 65536 KB
Gven a list of montary amounts in a standard format,please calculate the total amount.
We define the formas follows:
1.The amount starts with'.
2.The amount could have a leading'0'if and only if it is less then 1.
3.The amount ends with a decimal point and exactly 2 follwing digits.
4.The digits to the left of the decimal point are separated into groups of three bycomas(a group of one or two digits may appar on the left)
Input
The input consists of multile tests.The first line of each test contains an integer N(1==N==10000)which indicates the numbers of amounts.The next N lineas contain N amounts.All amounts and and the total bent 0
Output
For each input test,output the total amount.
Sample Input
1,234,567.89ドル9,876,543.21ドル0.01ドル1.00ドルです.
Sample Output
$11,111,111.10$1.11
Author:
ZHANG,Zheng
ソース:
Zhejiang Provincial Prograamming Contect 2005
言葉はもう私の心の中の興奮した気持ちを表現できなくなりました.やっとこの問題を乗り越えました.この問題は8回もWAしました.本当に嬉しいです.
この問題も難しくないです.処理する時は細かい点が多いです.特にコンマを処理する時は、まず文字列を型配列の中に保存して、それから大数の加算の原理によって結果を計算します.最後に出力問題を処理します.sad
Total Amount
Time Limit: 2 Seconds
メモリLimit: 65536 KB
Gven a list of montary amounts in a standard format,please calculate the total amount.
We define the formas follows:
1.The amount starts with'.
2.The amount could have a leading'0'if and only if it is less then 1.
3.The amount ends with a decimal point and exactly 2 follwing digits.
4.The digits to the left of the decimal point are separated into groups of three bycomas(a group of one or two digits may appar on the left)
Input
The input consists of multile tests.The first line of each test contains an integer N(1==N==10000)which indicates the numbers of amounts.The next N lineas contain N amounts.All amounts and and the total bent 0
Output
For each input test,output the total amount.
Sample Input
1,234,567.89ドル9,876,543.21ドル0.01ドル1.00ドルです.
Sample Output
$11,111,111.10$1.11
Author:
ZHANG,Zheng
ソース:
Zhejiang Provincial Prograamming Contect 2005
言葉はもう私の心の中の興奮した気持ちを表現できなくなりました.やっとこの問題を乗り越えました.この問題は8回もWAしました.本当に嬉しいです.
この問題も難しくないです.処理する時は細かい点が多いです.特にコンマを処理する時は、まず文字列を型配列の中に保存して、それから大数の加算の原理によって結果を計算します.最後に出力問題を処理します.sad
#include
#include
char s[10000][107],ss[10000][107];
int z[107];
int main()
{
int n,a;
while(scanf("%d",&n),n)
{
int max=-1,len;
memset(z,0,sizeof(z));
for(int i=1; i<=n; i++)
{
memset(s,0,sizeof(s));// for ,
memset(ss,0,sizeof(ss));
scanf("%s",s[i]);
a=0;
len=strlen(s[i]);
if(len>max)max=len;
for(int j=len-1; j>=0; j--)//
ss[i][a++]=s[i][j];
a=0;
for(int j=0; j='0'&&ss[i][j]<='9')
z[a++]+=ss[i][j]-'0';
}
}
for(int i=0; i=10)
{
while(z[i]>=10)
{
z[i]-=10;
z[i+1]++;
}
}
printf("$");
int bb;
for(int i=max-1; i>=0; i--)// ,
if(z[i]!=0)
{
bb=i;
break;
}
len=bb+1;
if(len==1)printf("0.0%d
",z[0]);
else if(len==2)printf("0.%d%d
",z[1],z[0]);
else if(len>2&&len<=5)
{
for(int i=len-1;i>=2;i--)
printf("%d",z[i]);
printf(".%d%d
",z[1],z[0]);
}
else
{
int lenn=len-2,flag=0,c=0,d=0;
int mol=lenn%3;
if(mol==0){flag=1;}
for(int i=len-1;i>=2;i--)
{
c++;
if(flag)d++;
printf("%d",z[i]);
if(c==mol){printf(",");flag=1;}
if(d!=0&&d%3==0&&i!=2)printf(",");//if ,
}
printf(".%d%d
",z[1],z[0]);
}
}
return 0;
}