1 条题解

  • 0
    @ 2025-4-12 21:43:14

    C :

    #include "stdio.h"
    #include "string.h"
    #define _CRT_SECURE_NO_DEPRECATE
    #define _CRT_SECURE_NO_WARNINGS
    
    int sum_have, new_have;
    int sum[20];
    int new[20];
    
    void change(char str[])
    {
    	int length = strlen(str);
    	int i,j,k;
    	j = 0;
    	for (i = 1; i <= 20; i++)
    	{
    		new[i] = 0;
    	}
    	for (i = length; i >=0; i--)
    	{
    		if ((str[i] >= '0') && (str[i] <= '9'))
    		{
    			j++;
    			new[j] = (int)str[i] - 48;
    			new_have = j;
    		}
    	}
    	
    
    
    }
    
    
    void work(int n)
    {
    	int i,j,max;
    	char str[100];
    	for (i = 1; i <= 20; i++)
    	{
    		sum[i] = 0;
    	
    	}
    	sum_have = 0;
    	for (i = 1; i <= n; i++)
    	{
    		gets(str);
    		change(str);
    		max = sum_have;
    		if (new_have > sum_have) max = new_have;
    		for (j = 1; j <= max; j++)
    		{
    			sum[j] = sum[j] + new[j];
    			if (sum[j] > 9)
    			{
    				sum[j + 1] ++;
    				sum[j] = sum[j] - 10;
    				if (j +1> max) max = j+1;
    			}
    		}
    		sum_have = max;
    	}
    	printf("$");
    	if (sum_have < 3) printf("0.%d%d\n", sum[2], sum[1]);
    	else
    	{
    		i = sum_have;
    		j = 3-(sum_have-((sum_have-2)/3*3)-2);
    		while (i>3)
    		{
    			printf("%d", sum[i]);
    			j++;
    			if (j == 3) 
    			{
    				printf(",");
    				j = 0;
    			}
    			i--;
    		}
    		printf("%d.%d%d\n", sum[3], sum[2], sum[1]);
    	}
    }
    
    void main()
    {
    	int n;
    	while (1)
    	{
    		scanf("%d", &n);
    		if (n == 0) break;
    		getchar();
    		work(n);
    	}
    }
    

    C++ :

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <math.h>
    #include <algorithm>
    #include <map>
    #include <queue>
    #include <stack>
    #include <iostream>
    using namespace std;
    char a[100], b[100], c[100];
    
    void addtion(char *b)
    {
    	int i, j, la = strlen(a), lb = strlen(b), dig = 0, d;
    	for(i = la, j = lb; i >= 1 && j >= 1; i --, j --)
    	{
    		if(a[i] >= '0' && a[i] <= '9' && b[j] >= '0' && b[j] <= '9')
    		{
    			d = (a[i] - '0' + b[j] - '0' + dig) / 10;
    			a[i] = (a[i] - '0' + b[j] - '0' + dig) % 10 + '0';
    			dig = d;
    		}
    	}
    
    	for(;i >= 1 ; i --)
    	{
    		if(a[i] >= '0' && a[i] <= '9')
    		{
    			d = (a[i] - '0' + dig) / 10;
    			a[i] = (a[i] - '0' + dig) % 10 + '0';
    			dig = d;
    		}
    	}
    	int k = j;
    	for(; j >= 1 ; j --)
    	{
    		if(b[j] >= '0' && b[j] <= '9')
    		{
    			d = (b[j] - '0' + dig) / 10;
    			b[j] = (b[j] - '0' + dig) % 10 + '0';
    			dig = d;
    		}
    	}
    	if(k > 0)
    	{
    		la += k;
    		for(i = la + k; i > k ; i -- )
    		{
    			a[i] = a[i-k];
    		}
    		for(j = i ; j >= 0 ; j --)
    		{
    			a[j] = b[k--];
    		}
    	}
    	if(dig > 0)
    	{
    		if((la - 4) % 4 == 3)
    		{
    			for(i = la + 2 ; i > 2; i --)
    			{
    				a[i] = a[i-2];
    			}
    			a[2] = ',';
    			a[1] = dig + '0';
    		}
    		else
    		{
    			for(i = la + 1 ; i > 1; i --)
    			{
    				a[i] = a[i-1];
    			}
    			a[1] = dig + '0';
    		}
    	}
    }
    
    int main ()
    {
    	int n, m, i, j, k, len;
    	while(scanf("%d",&n) && n)
    	{
    		strcpy(a,"$0.00");
    		for(i = 0 ; i < n ; i ++)
    		{
    			scanf("%s",b);
    			addtion(b);
    		}
    		printf("%s\n",a);
    	}
    	return 0;
    }
    
    • 1

    信息

    ID
    1357
    时间
    2000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者