小程序学习:整数各位数字重新排列为最小的数

要求:

输入整数范围:-10^5 <= key <= 10^5

输出:整数各位数字重新排列后,能得到的最小数。

例如:输入-70303,输出-73300。

(说明:以下仅为个人实现方法,必然不是最优实现方法,也可能存在问题,原始目的仅是供女朋友学习参考。如果各位童鞋有更好的方法,请留言,大家多多交流,共同提高。)

思路:

(1)分离整数的各位数字存放在数组中;

(2)数字升序排序;

(3)排序后,将最小的且不为0的数与数组中的最小数交换;

(4)将数组合并为新的整数。

运行程序方法:

Linux生成的可执行程序为a.out,请在a.out所在目录下,运行命令:  $  ./a.out  -70303

Windows如果生成的可执行程序为test.exe,请在test.exe所在目录下,运行命令: $  test.exe  -70303

(说明:想更换整数输入,仅需将-70303更换为想输入的整数即可。)

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 #define N 6  //规定输入整数最多位数
 5 
 6 void swap(int *x, int *y)
 7 {
 8     int temp = *x;
 9     *x = *y;
10     *y = temp;
11 }
12 
13 void bubbleSort(int *arr, int len)
14 {
15     int i, j;
16     for(i = 1; i < len; ++i)
17         for(j = 0; j < len - i; ++j)
18             if(arr[j] > arr[j + 1])
19                 swap(arr + j, arr + j + 1);
20 }
21 
22 int split(long val, int *num)
23 {
24     int i;
25     for(i = 0; i < N; ++i){
26         num[i] = val % 10;
27         val = val / 10;
28         if(val == 0)
29             return i + 1;
30     }
31     return i;
32 }
33 
34 int merge(int *num, int len)
35 {
36     long result = 0;
37     int i;
38     for(i = 0; i < len; ++i)
39         result = result * 10 + num[i];
40     return result;
41 }
42 
43 long lockingKey(long val)
44 {
45     int num[N];
46     int i;
47     int count = split(val, num);
48     bubbleSort(num, count);
49     for(i = 0; i < count; ++i){
50         if(num[i] != 0){
51             swap(num, num + i);
52             break;
53         }
54     }
55     return merge(num, count);
56 } 
57 
58 int main(int argc, char **argv)
59 {
60     printf("%ld\n", lockingKey(atol(argv[1])));
61     return 0;
62 }

 

转载于:https://www.cnblogs.com/yangfanruhai/p/7430829.html

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值