标签:ace namespace 输入输出格式 return 数字 bsp turn nbsp 最大
一个简单的数学题。。。
输入一个数N(N<=200位),拆分,得出最小的和最大的数列。
如: 123求出最小的=123
123求出最大的=321
再求出它们的差。
如: 321-123=?
若不是数字,直接输出NO
输入格式:
第一行:输入一个数N(N<=200位)
输出格式:
输出看【题目描述】
123
321-123=198
10
10-01=9
撒反对威锋网
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; }
标签:ace namespace 输入输出格式 return 数字 bsp turn nbsp 最大
原文地址:http://www.cnblogs.com/IUUUUUUUskyyy/p/6362619.html