帮忙用pascal语言解决一道题~~

来源:百度知道 编辑:UC知道 时间:2024/06/07 19:08:16
我是新手啊,,
数字换位

问题描述

给出一个自然数n(1<=n<=10^9),任意交换各个数位上的数字,得到另一个自然数m,在保持位数不变的情况下,求最小的m。

输入

一行,n

输出

一行,m

输入样例

2014

输出样例

1024

这个程序比较麻烦,还可以优化。
program xxx(input,output);
var
n:qword;
a:array[1..9]of integer;
i,j,k,q,t,r,s,m:integer;
begin
read(n);
a[1]:=n div 100000000;
n:=n-a[1]*100000000;
a[2]:=n div 10000000;
n:=n-a[2]*10000000;
a[3]:=n div 1000000;
n:=n-a[3]*1000000;
a[4]:=n div 100000;
n:=n-a[4]*100000;
a[5]:=n div 10000;
n:=n-a[5]*10000;
a[6]:=n div 1000;
n:=n-a[6]*1000;
a[7]:=n div 100;
n:=n-a[7]*100;
a[8]:=n div 10;
n:=n-a[8]*10;
a[9]:=n div 1;
n:=n-a[9]*1;
for i:=1 to 9 do
if (a[i]<>0) and (t<>0) then t:=i;
for i:=t to 9 do begin
m:=a[i];
q:=a[i];
for j:=i to 9 do if a[j]<q then begin
q:=a[j];
r:=j;
end;
if m<q then begin
s:=a[i];
a[i]:=a[r];
a[r]:=s;
for k:=t to 9 do write(a[k]);