高精度一向是一個讓本蒟蒻頭禿的東西,今天居然要寫高精度的排序。。。
輸入數的個數,以及每個數,求出其中最大數及其編號。
大體思路
通過貪心的辦法,每次輸入時記錄最大數的編號以及最大數的位數,將所有數存入一個二維數組(如果之後不用的話可以不存儲),然後每次輸入時只要比較位數就可以了,如果位數一樣就比較最高位大小,如果還一樣就比較次高位大小……依次類推,找出到底誰大。
核心:將多個數的比較通過貪心(可以理解爲冒泡排序)轉換爲兩個高精度數的比較
上代碼
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,ma,a[30][1000],maxx;
MAXX存儲最大數的位數,ma存儲最大數的編號
char x[105];
int com(int a,int b)
{
if(a<b) return 0;
if(a>b) return 1;
if(a==b) return 2;
}
爲了方便寫的比較函數
int main()
{
cin>>n;
for(int i=0;i<n;i++)
{
cin>>x;
for(int j=0;j<strlen(x);j++) a[i][j]=x[j]-'0';
if(strlen(x)>maxx)
{
maxx=strlen(x);
ma=i;
}
以上爲存儲
下面重點來了
else if(strlen(x)==maxx)
{
for(int j=0;j<strlen(x);j++)
{
int f=com(a[ma][j],a[i][j]);
if(f==0)
{
ma=i;
break;
}
if(f==1) break;
if(f==2) continue;
}
}
}
0,1,2分別代表三種狀態(<,>,=),如果這一位等於就繼續循環,比較下一位。比較出來差異就break掉
cout<<ma+1<<endl;
因爲是從0開始存的數組,所以要+1
for(int i=0;i<maxx;i++)
{
cout<<a[ma][i];
}
}