Description
輸入兩個實數,判斷第一個數大,第二個數大還是一樣大。每個數的格式為: [整數部分].[小數部分]
簡單起見,整數部分和小數部分都保證非空,且整數部分不會有前導 0。不過,小數部分的最 後可以有 0,因此 0.0 和 0.000 是一樣大的。
Input
輸入包含不超過 20 組數據。每組數據包含一行,有兩個實數(格式如前所述)。每個實數都 包含不超過 100 個字符。Output
對於每組數據,如果第一個數大,輸出"Bigger"。如果第一個數小,輸出"Smaller"。如果兩個 數相同,輸出"Same"。Sample Input
1.0 2.0 0.00001 0.00000 0.0 0.000
Sample Output
Case 1: Smaller Case 2: Bigger Case 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; }