標籤:
B - 大還是小?
Time Limit:5000MS
Memory Limit:65535KB
64bit IO Format:
Description
輸入兩個實數,判斷第一個數大,第二個數大還是一樣大。每個數的格式為: [整數部分].[小數部分]
簡單起見,整數部分和小數部分都保證非空,且整數部分不會有前置 0。不過,小數部分的最 後可以有 0,因此 0.0 和 0.000 是一樣大的。
Input
輸入包含不超過 20 組資料。每組資料包含一行,有兩個實數(格式如前所述)。每個實數都 包含不超過 100 個字元。
Output
對於每組資料,如果第一個數大,輸出"Bigger"。如果第一個數小,輸出"Smaller"。如果兩個 數相同,輸出"Same"。
Sample Input
1.0 2.00.00001 0.000000.0 0.000
Sample Output
Case 1: SmallerCase 2: BiggerCase 3: Same
好吧.......因為隊裡刷題我是從前往後刷,所以這道水題先被我看見A了,題意全是中文也沒什麼可解釋的。數位位元是100字元,所以必須要用字串來處理了,小數點後面的自動補上0以方便最後判斷是否相同,然後小數點前面的誰位元多誰就大,位元一樣就從第一個數開始比較,一直比出結果為止。這題輸入的格式已經固定好了是“整數部分.小數部分"所以不用擔心出現一個沒有小數點的數,直接比較就可以了。
下面代碼:
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;char a[105],b[105];int max(int a,int b){ return a>b?a:b;}int main(){ int len1,len2; int i,j; int k=0; int d1,d2; int t; while(scanf("%s",a)!=EOF) { scanf("%s",b); len1=strlen(a); len2=strlen(b); for(i=len1;i<102;i++) { a[i]=‘0‘; } for(i=len2;i<102;i++) { b[i]=‘0‘; } t=0; k++; d1=len1; d2=len2; cout<<"Case "<<k<<": "; for(i=0;i<len1;i++) { if(a[i]==‘.‘) { d1=i; break; } } for(i=0;i<len2;i++) { if(b[i]==‘.‘) { d2=i; break; } } if(d1>d2) { cout<<"Bigger"<<endl; t=2; } else if(d1<d2) { cout<<"Smaller"<<endl; t=2; } else { for(i=0;i<max(len1,len2);i++) { if(a[i]>b[i]) { t=1; break; } else if(a[i]<b[i]) { t=-1; break; } } } if(t==0) cout<<"Same"<<endl; else if(t==1) cout<<"Bigger"<<endl; else if(t==-1) cout<<"Smaller"<<endl; } return 0;}
第十一屆“藍狐網路杯”湖南省大學生電腦程式設計競賽 B - 大還是小? 字串水題