標籤: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;}
去重排序