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;
}