给出多个字符串浮点数,,并且小数部分有且只有两位。。求和
整数部分每隔三位有一个逗号分隔符,有个比较好的处理办法就是,先不考虑逗号跟小数点,直接相加进位求和,最后把后两位的前面加上小数点
#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;
}