首页 > 其他 > 详细

PAT:1060. Are They Equal (25) AC

时间:2015-03-10 23:02:04      阅读:649      评论:0      收藏:0      [点我收藏+]
#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;
}

PAT:1060. Are They Equal (25) AC

原文:http://www.cnblogs.com/Evence/p/4328534.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!