题意:给你m,s,m代表位数,s代表位数和,问你最大和最小的数是多少。
解题思路:开始以为两个数必定互为镜像,后来发现没有前导0,然后各种细节处理,错了很多道,细节还是要注意。
解题代码:
1 // File Name: 489c.cpp 2 // Author: darkdream 3 // Created Time: 2015年03月07日 星期六 08时47分56秒 4 5 #include<vector> 6 #include<list> 7 #include<map> 8 #include<set> 9 #include<deque> 10 #include<stack> 11 #include<bitset> 12 #include<algorithm> 13 #include<functional> 14 #include<numeric> 15 #include<utility> 16 #include<sstream> 17 #include<iostream> 18 #include<iomanip> 19 #include<cstdio> 20 #include<cmath> 21 #include<cstdlib> 22 #include<cstring> 23 #include<ctime> 24 #define LL long long 25 26 using namespace std; 27 int str[1005]; 28 int main(){ 29 int m , s; 30 scanf("%d %d",&m,&s); 31 int k = s /9; 32 if(m*9 < s) 33 { 34 printf("-1 -1 "); 35 return 0 ; 36 } 37 if(s == 0 ) 38 { 39 if(m == 1) 40 printf("0 0 "); 41 else printf("-1 -1 "); 42 return 0 ; 43 } 44 int t = s - k * 9; 45 if(t == 0 ) 46 { 47 k = k -1; 48 t = 9; 49 } 50 if(m - k <= 1) 51 { 52 if(m - k == 1 ) 53 printf("%d",t); 54 for(int i = 1;i <= k;i ++) 55 printf("9"); 56 }else{ 57 printf("1"); 58 for(int i = 1;i <= m-k -2 ;i ++) 59 printf("0"); 60 printf("%d",t-1); 61 for(int i = 1;i <= k ;i ++) 62 printf("9"); 63 } 64 printf(" "); 65 for(int i = 1;i <= k; i ++) 66 printf("9"); 67 if(k != m) 68 printf("%d",t); 69 for(int i = 1;i <= m - k - 1; i ++) 70 printf("0"); 71 return 0; 72 }