OJ_1137 浮点数加法

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> ve;
void getsum(string a,string b)
{
     ve.clear();
      int i,j;
      i=j=0;
      while(a[i]!='.')i++;
      while(b[j]!='.')j++;
      int alenl=i-1;
      int blenl=j-1;
      int alenr=a.size()-i;
      int blenr=b.size()-j;
      int dot=0;
      if(alenr>blenr)
      {
                     dot=alenr;
                     for(int i=0;i<alenr-blenr;i++)
                             b+='0';
      }else
      {
           dot=blenr;
            for(int i=0;i<blenr-alenr;i++)
                             a+='0';
       }
       
      i=a.size()-1;
      j=b.size()-1;
      int inc=0;
      while(i>=0&&j>=0)
      {
             if(a[i]=='.')
             {
                          i--;j--;
                          continue;
             }
             int k=a[i]-'0'+b[j]-'0'+inc;
             int newk=k%10;
             inc=k/10;
             ve.push_back(newk);        
             i--;
             j--;
                       
      }
      while(i>=0)
      {
             int k=a[i]-'0'+inc;
             int newk=k%10;
             inc=k/10;
             ve.push_back(newk); 
              i--;
       
      }
       while(j>=0)
      {
             int k=b[j]-'0'+inc;
             int newk=k%10;
             inc=k/10;
             ve.push_back(newk); 
            
             j--;
      }
      if(inc>0)
             ve.push_back(inc);
      i=0;
      while(ve[i]==0)i++;
      int sumsize=ve.size()-i;
       reverse(ve.begin(),ve.end());
       
       dot=ve.size()-dot+1;
       i=0;
       while(ve[i]=='0')i++;
       for(;i<dot;i++)
       {
                      cout<<ve[i];
       }
       cout<<".";
       for(;i<sumsize;i++)
       cout<<ve[i];
       cout<<endl;
      
      
      
      
      
}
void func()
{
     int n;
     while(cin>>n)
     {
                  for(int i=0;i<n;i++)
                  {
                          string a,b;
                          cin>>a>>b;
                          getsum(a,b);
                          
                  }
     }
}
int main(int argc, char *argv[])
{
    
	//printf("Hello, world\n");
	func();
	return 0;
}

关键在小数点,计算对齐,前置0和后置0

题目描述:

求2个浮点数相加的和
题目中输入输出中出现浮点数都有如下的形式:
P1P2...Pi.Q1Q2...Qj
对于整数部分,P1P2...Pi是一个非负整数
对于小数部分,Qj不等于0

输入:

对于每组案例,第1行是测试数据的组数n,每组测试数据占2行,分别是两个加数。
每组测试数据之间有一个空行,每行数据不超过100个字符

输出:

每组案例是n行,每组测试数据有一行输出是相应的和。
输出保证一定是一个小数部分不为0的浮点数

样例输入:
2
0.111111111111111111111111111111
0.111111111111111111111111111111

10000000.655555555555555555555555555555
1.444444444444444444444444444445
样例输出:
0.222222222222222222222222222222
10000002.1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值