大數比較(JSU-ZJJ)
阿新 • • 發佈:2018-12-23
題目描述
給定任意位數長度的兩個數,比較它們數值大小。
保證A,B長度不超過5000
輸入
每個測試用例含有兩個數,代表兩個任意位數長度的數A,B.輸入的數字符合規範,沒有多餘的零
輸出
比較這兩個任意位數長度的數的大小,如果A>B,則輸出1;如果A=B,則輸出0;如果A<B,則輸出-1。
樣例輸入
123451234512345 543215432154321
54.321 12.345
樣例輸出
-1
1
分析:
此題可以先比較小數點前面的長度來先判斷一波。如果長度相當就比較小數點後面的大小。
#include"stdio.h" #include"string.h" int INTleght(char a[]) { int i,l; l=strlen(a); for(i=0;i<l;i++) if(a[i]=='.') break; return i; } int cmp(char a[],char b[],int leghta) { int i; for(i=0;i<leghta;i++) if(a[i]!=b[i]) break; if(i!=leghta) return a[i]-b[i]; else return 0; } int cmp1(char a[],char b[],int leghta) { return strcmp(a+leghta+1,b+leghta+1); } int main() { char a[5001],b[5001]; int leghta,leghtb; int i,j,k,l; while(~scanf("%s%s",a,b)) { leghta=INTleght(a); leghtb=INTleght(b); if(leghta>leghtb) printf("%d\n",1); else if(leghta<leghtb) printf("%d\n",-1); else if(cmp(a,b,leghta)>0) printf("%d\n",1); else if(cmp(a,b,leghtb)<0) printf("%d\n",-1); else if(cmp1(a,b,leghta)>0) printf("%d\n",1); else if(cmp1(a,b,leghta)<0) printf("%d\n",-1); else printf("%d\n",0); } }