2016年7月11日 星期一

TIOJ 1058 兩個數字

        由於某位大神的需要,半夜又重新打開電腦打了這篇,這是一個非常麻煩的判斷題
但是如果某些東西運用得當,可以省下不少功夫,在此,我就說說我的簡易作法給各位參考
        首先,題目的麻煩之處,在於小數點以下可能會超出double範圍,所以就得用類似大數的處理方法,而我的方法是先當作c++型字串的string 輸入再處理,以下是我的處理方法

1.利用stringstream轉成浮點數先來大略判定大小
2.要是無法分出大小,可知double可儲存的範圍內,必定相同,所以整數部分必相同,整數位數亦然
    所以從頭開始比較大小即可,而題目說兩數不會相同,所以無須判定相同情況
因此,就有以下的code
p.s. stringstream的清除 一定要ss.clear();和ss.str(""); 缺一不可

#include <bits/stdc++.h>
using namespace std;
string s1,s2;
stringstream ss;
int main(){
 while(cin>>s1>>s2){
  int d1,d2;
  ss<<s1;
  ss>>d1;
  ss.clear();
  ss.str("");
  ss<<s2;
  ss>>d2;
  if(d1>d2)
   cout<<s1<<'\n';
  else if(d2>d1)
   cout<<s2<<'\n';
  else{
   for(int j=0;;j++){
    if(s1[j]>s2[j]){
     cout<<s1<<'\n';
     break;
    }
    else if(s2[j]>s1[j]){
     cout<<s2<<'\n';
     break;
    }
   }
  }
 }
}

沒有留言:

張貼留言