穩定的數字

2021-07-14 04:49:30 字數 2981 閱讀 3737

time limits: 1000 ms memory limits: 65536 kb

description

定義一種操作,經過該操作,可以得到乙個數中所有數字的乘積(原數至少要是個兩位數)。比如679經過一次操作可以得到378。  你的任務讀入乙個數,計算經過一次操作得到它的最小的數是多少。

input

僅一行,表示乙個十進位制數。數的長度可能到達1000位。

output

經過一次操作可以得到這個數的最小的數。如果沒有這樣的數,輸出「there is no such number.」(不包括引號)

sample input

input1:

0
input2:

18
input3:

51
sample output

output1:

10
output2:

29
output3:

there is no such number.
其實很簡單,這道題主要考的是高精度除以單精度,不用多說了吧。

如果這個數是一位數,輸出加10,其他的直接從9到2列舉再作除法,倒過來輸出就可以了。

如果你怕會超時的話,那就壓位(狀態壓縮)吧。

const

maxn=1000000000000000000;

var c:char;

a:array[1..4000]of int64;

num,b:array[0..4000]of int64;

ten:array[0..18]of int64;

n,i,top,tot,j:longint;

q:boolean;

function

can(v:longint):boolean;

var x,i:longint;

begin

x:=0;

if(top=1)and(b[top]=0) then

exit(false);

for i:=top downto1do

begin

num[i]:=(x*maxn+b[i])div v;

x:=(x*maxn+b[i])mod v;

end;

if x<>0

then

exit(false);

b:=num;

while(top>1)and(b[top]=0)do dec(top);

exit(true);

end;

begin

assign(input,'number.in'); reset(input);

assign(output,'number.out'); rewrite(output);

read(c);

while c in['0'..'9'] do

begin inc(n);num[n]:=ord(c)-48;read(c);end;

if n=1

then

begin writeln(num[n]+10);halt;end;

b[0]:=maxn;

ten[0]:=1;

for i:=1

to18

do ten[i]:=ten[i-1]*10;

for j:=n downto1do

begin

i:=n-j+1;

if i mod

18=1

then inc(top);

b[top]:=b[top]+num[j]*ten[(i-1) mod

18];

end;q:=true;

for i:=9

downto2do

begin

while can(i) do

begin inc(tot);a[tot]:=i;end;

if(top=1)and(b[1]=1) then

begin q:=false;break;end;

end;

if q then

begin writeln('there is no such number.');halt;end;

for i:=tot downto1do

if a[i]<>0

then

write(a[i]);

end.

#include

#include

#define fo(i,x,y) for(int i=x;i<=y;i++)

#define min(x,y) ((x)<(y)?(x):(y))

using namespace std;

int find(int,int);

int n,fx[8][2]=,,,,,,,},x[11],y[11];

int f[11][11][11][1024],k,dist[11][11],ans=0x7fffffff,data[401][3];

bool pd[21][21];

int main()

}

memset(f,0x7f,sizeof(f));

fo(i,1,k)f[i][1][i][1<<(i-1)]=0;

fo(s,1,k)fo(i,2,k)fo(j,1,k)fo(l,1,(1<0)fo(o,1,k)if(o!=j && (l & (1<<(o-1)))>0)

fo(i,1,k)fo(j,1,k)

int find(int h,int t)

}}

穩定的和不穩定的排序

首先,排序演算法的穩定性大家應該都知道,通俗地講就是能保證排序前2個相等的數其在序列的前後位置順序和排序後它們兩個的前後位置順序相同。在簡單形式化一下,如果ai aj,ai原來在位置前,排序後ai還是要在aj位置前。其次,說一下穩定性的好處。排序演算法如果是穩定的,那麼從乙個鍵上排序,然後再從另乙個...

穩定的軟體

軟體的複雜度發展到今天的程度,每個參與軟體生產的人對自己產品的質量可能多少都會有些擔心。至今還沒有理論能夠系統的預估和保證軟體產品的質量 可能永遠不會發展出這樣的理論,因為軟體作為人類思想的固定形式,對其質量的系統化保證可能已經超出了人類認識的 極限 不過,多多少少會在軟體的歷史中沉澱一些有用的東西...

穩定的活水

既保持員工的流動性,又要保持組織的相對穩定性,是很多企業不得不面對的問題。一位在哈佛大學畢業的中國學生帶著困惑去美國參加校友會。他回國後建立了一家it服務公司,專門為大型企業提供辦公軟體產品。由於業務穩定,企業的利潤一直很好。但是有一段時間人才流動性過大,企業業務能力降低,業務流失嚴重,他採取了緊急...