去重排序

來源:互聯網
上載者:User

標籤:ace   namespace   輸入輸出格式   return   數字   bsp   turn   nbsp   最大   

題目背景

一個簡單的數學題。。。

題目描述

輸入一個數N(N<=200位),拆分,得出最小的和最大的數列。

如: 123求出最小的=123

123求出最大的=321

再求出它們的差。

如: 321-123=?

若不是數字,直接輸出NO

輸入輸出格式

輸入格式:

 

第一行:輸入一個數N(N<=200位)

 

輸出格式:

 

輸出看【題目描述】

 

輸入輸出範例輸入範例#1:
123
輸出範例#1:
321-123=198
輸入範例#2:
10
輸出範例#2:
10-01=9
輸入範例#3:
撒反對威鋒網
輸出範例#3:
NO
說明

對於%30的資料=<30位

對於%60的資料=<60位

對於%100的資料=<200位

 

思路:

  兩遍排序,一遍減法,去掉前置0然後輸出;

  有一個點是最大排列等於最小排列,這時要輸出一個0;

 

 

來,上代碼:

#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;int len,ans[300];char ch[300],ch_1[300],ch_2[300];bool cmp(char a,char b){    return a>b;}int main(){    cin>>ch;    len=strlen(ch);    for(int i=0;i<len;i++)    {        if(ch[i]>‘9‘||ch[i]<‘0‘)        {            cout<<"NO"<<endl;            return 0;        }        ch_1[i]=ch[i],ch_2[i]=ch[i];    }    sort(ch_1,ch_1+len,cmp);    sort(ch_2,ch_2+len);    cout<<ch_1<<‘-‘<<ch_2<<‘=‘;    for(int i=0;i<len;i++)    {        ans[i]=ch_1[i]-ch_2[i];    }    for(int i=len-1;i>=0;i--)    {        if(ans[i]<0) ans[i-1]--,ans[i]+=10;    }    bool if_=true;    for(int i=0;i<len;i++)    {        if(ans[i]==0) continue;        if_=false;        for(int j=i;j<len;j++) cout<<ans[j];        break;    }    if(if_) cout<<‘0‘;    return 0;}

 

去重排序

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.