PAT:1060. Are They Equal (25) AC

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;

int  n;

string deal(string s,int &e)          //【思维】1:吸收多余0:。2:找到“.”判断与1的大小。3:去除“.”的同时统计10的指数(正负与step2有关)
{                        //4:判断是否删完了,删完了表明数字是0。5:存入前n个数字,不足用0补。返回
  int k=0;
  while(s.size()>0 && s[0]=='0')        //吸收.前面多余的0
    s.erase(s.begin());
  if(s[0]=='.')                //Situation1:数字小于1
  {
    s.erase(s.begin());            //删除“.”
    while(s.size()>0 && s[0]=='0')      //吸收.前面多余的0
    {
      s.erase(s.begin());
      --e;                //指数为负
    }
  }
  else                    //Situation2:数字大于1
  {
    while(k<s.size() && s[k]!='.')      //数小数点前有几位
    {
      ++k;
      ++e;
    }
    if(k<s.size())              //删除“.”
      s.erase(s.begin()+k);
  }
  if(s.size()==0)                //这个数为0
    e=0;
  k=0;                    //下标归零
  int num=0;
  string str;
  while(num<n)                //将前n位有效数字存入str
  {
    if(k<s.size())
      str+=s[k++];            //后面接上
    else
      str+='0';
    ++num;
  }
  return str;
}

int main()
{
  string s1,s2,s3,s4;
  cin>>n>>s1>>s2;
  int e1=0,e2=0;      //s1,s2的指数
  
  s3=deal(s1,e1);
  s4=deal(s2,e2);

  if(s3==s4 && e1==e2)
    cout<<"YES 0."<<s3<<"*10^"<<e1<<endl;
  else
    cout<<"NO 0."<<s3<<"*10^"<<e1<<" 0."<<s4<<"*10^"<<e2<<endl;
  return 0;
}
posted on 2015-03-10 21:58  Evence  阅读(180)  评论(0编辑  收藏  举报