1 条题解

  • 0
    @ 2025-4-7 21:19:28

    C :

    #include "string.h"
    #include "math.h"
    int main(int argc, char* argv[])
    {
    	int n,i;
    	scanf("%d",&n);
    	for(i=0;i<n;i++)
    	{
    		char a[101],b[101],*p;
    		scanf("%s%s",a,b);
    		int j,k,la,lb,coua,coub,s,c,ln,ca,cb;
    		int ina[101],inb[101],sum[101];
    		la=strlen(a);
    		lb=strlen(b);
    		p=strchr(a,'.');
    		if (NULL==p) coua=0;
    		else 
    		 coua=la-(p-a)-1;
    		p=strchr(b,'.');
    		if (NULL==p) coub=0;
    		else 
    		 coub=lb-(p-b)-1;		
    		c=coua>coub?coua:coub;
    		ln=(la-coua)>(lb-coub)?la-coua:lb-coub;
    		ca=0,cb=0;
    		for(j=0;j<c;j++)	
    		{			
    			if(coua>coub)
    			{
    				inb[j]=0;
    				ina[j]=a[la-j-1]-'0';
    				coub++;
    				cb++;
    			}
    			else if(coua<coub)
    			{
    				ina[j]=0;
    				inb[j]=b[lb-j-1]-'0';
    				coua++;
    				ca++;
    			}
    			else
    			{
    				ina[j]=a[la-j-1+ca]-'0';
    				inb[j]=b[lb-j-1+cb]-'0';
    			}
    		}
    		ina[j]=-2,inb[j]=-2;
    		for(k=j+1;k<ln+c;k++)
    		{
    			if(k>=la+ca) 
    			{
    				ina[k]=0;
    				inb[k]=b[lb-k-1+cb]-'0';
    			}
    			else if(k>=lb+cb) 
    			{
    				inb[k]=0;
    				ina[k]=a[la-k-1+ca]-'0';
    			}
    			else
    			{
    				ina[k]=a[la-k-1+ca]-'0';
    				inb[k]=b[lb-k-1+cb]-'0';
    			}
    		}
    	    s=0;
    		for(j=0;j<ln+c;j++)
    		{
    			if(ina[j]!=-2&&j<ln+c-1)	
    			{
    				sum[j]=(s+ina[j]+inb[j])%10;
    				s=(s+ina[j]+inb[j])/10;
    			}
    			else if(ina[j]!=-2&&j==ln+c-1)
    				sum[j]=s+ina[j]+inb[j];
    			else
    				sum[j]=-2;
    		}		
    		for(j=0;j<c;j++)
    		{
    			if(sum[j]!=0) break;
    		}
    		for(k=ln+c-1;k>=j;k--)
    		{
    			if(ina[k]==-2&&j<c)
    				printf(".");
    			else if(ina[k]==-2&&j>=c)
    				continue;
    			else
    				printf("%d",sum[k]);
    		}
    		printf("\n");
    		if(i!=n-1)
    			gets(p);
    	}
    	return 0;
    
    }
    

    C++ :

    #include<iostream>
    #include<string>
    #include<algorithm>
    using namespace std;
                          
    void add_zero(string &a, string &b)
    {
        int a_sub_len = int(a.find('.'));
        int b_sub_len = int(b.find('.'));
        int &sub_max = a_sub_len > b_sub_len ? a_sub_len : b_sub_len;
        string &sub_min = a_sub_len < b_sub_len ? a : b;
        while(int(sub_min.find('.')) != sub_max)
        {
            sub_min.insert(sub_min.begin(), '0');
        }
        int a_len = a.length();
        int b_len = b.length();
        int max = a_len > b_len ? a_len : b_len;
        string &min = a.length() < b.length() ? a : b;
        while(min.length() != max)
        {
            min += '0';
        }
    }
                          
    string float_add(string &a, string &b)
    {
        add_zero(a, b);
        reverse(a.begin(), a.end());
        reverse(b.begin(), b.end());
        int len = a.length(), carry = 0;
        string result;
        for(int i = 0; i < len; i++)
        {
            if(a[i] == '.')   result += '.';
            else
            {
              result += char(((a[i] + b[i] - 96) + carry) % 10 + 48);
              carry = (a[i] + b[i] - 96 + carry) / 10;
            }
        }
        if(carry > 0)
        {
            result += char(carry + 48);
        }
                        
        while(result[0] == '0' && result[1] != '.')
        {
            result.erase(result.begin());
        }
        while(*(result.end() - 1) == '0'  && *(result.end() - 2) != '.')
        {
            result.erase(result.end() - 1);
        }
        reverse(result.begin(), result.end());
        return result;
    }
                         
    int main()
    {
        int n;
        string a, b;
        while(cin >> n) 
        {
            while(n--)
            {
                cin >> a >> b;
                cout << float_add(a, b) << endl;
            }
        }       
        return 0;
    }
    
    

    Java :

    
    
    import java.math.BigDecimal;
    import java.util.Scanner;
    
    public class Main{
       private static Scanner s = new Scanner(System.in) ;
       
       public static void main(String[] args) {
    	  int n = s.nextInt() ;
    	  
    	  for (int i = 0; i < n; i++) {
    		  BigDecimal x = s.nextBigDecimal() ;
    		  BigDecimal y = s.nextBigDecimal() ;
    		  BigDecimal result = x.add(y) ;
    		  
    		  result = result.stripTrailingZeros() ;
    		  System.out.println(result);
    	  }
       }
    }
    
    
    • 1

    信息

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