void-man

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

给出多个字符串浮点数,,并且小数部分有且只有两位。。求和

整数部分每隔三位有一个逗号分隔符,有个比较好的处理办法就是,先不考虑逗号跟小数点,直接相加进位求和,最后把后两位的前面加上小数点

#include <iostream>
#include
<cstring>
#include
<string>
using namespace std;
#include
<cstdio>
int main()
{
char s[50];
int n, i, j, k;
char a[50], b[50];
while(scanf("%d", &n) != EOF && n)
{
scanf(
"%s", s);
j
= 0;
for(i = 0; s[i]; i++)
if(s[i] >= '0' && s[i] <= '9')
a[j
++] = s[i];
a[j]
= '\0';
for(i = 1; i < n; i++)
{
char t[50];
scanf(
"%s", t);
k
= 0;
for(j = 0; t[j]; j++)
if(t[j] >= '0' && t[j] <= '9')
b[k
++] = t[j];
b[k]
= '\0';
int la = strlen(a), lb = strlen(b);
int cnt = 0, ans;
char p[50];
int kk = 0;
for(j = la-1, k = lb-1; j >= 0 || k >= 0; j--, k--)
{
char a1, b1;
if(j < 0) a1 = '0'; else a1 = a[j];
if(k < 0) b1 = '0'; else b1 = b[k];
ans
= (a1 + b1- '0' - '0' + cnt);
p[kk
++] = (ans % 10) + '0';
cnt
= ans >= 10 ? 1 : 0;
}
if(cnt == 1)p[kk++] = '1';p[kk] = '\0';
for(k = strlen(p)-1, j = 0; k >= 0; k--, j++)
a[j]
= p[k];
a[j]
= '\0';
}
string aa;
k
= 0;
int la = strlen(a);
for(i = la-1; i >= 0;i--)
{
if(i < la-2) k++;
aa
+= a[i];
if(i == la-2) aa += '.';
if(k % 3 == 0 && k != 0 && i != 0) aa += ',';
}
aa
+= '$';
for(i = aa.length()-1; i >= 0; i--)
cout
<< aa[i];
cout
<< endl;
}
return 0;
}
posted on 2011-04-17 14:56  void-man  阅读(225)  评论(0)    收藏  举报