复制粘贴
【题目描述】
kkk最近才学会输出语句,非常兴奋,就要输出N行“6”来表达她的兴奋。但是一条一条语句打呢又太慢,所以kkk就想到了——复制&粘贴!
当然一开始kkk会先打出一条输出语句,然后她可以选择复制粘贴。每次kkk可以复制1~t条语句(其中t表示当前的输出语句数)并粘贴。那么kkk最少需要复制几次才能写出N行“6”呢?
【输入格式】
有多组数据,每组数据包含一个整数N表示要输出多少行
【输出格式】
对于每组数据输出最少的复制次数
【样例输入】
2
10
【样例输出】
1
4
【数据范围】
1<=N<2^32
【分析】
不难发现,为了追求复制次数最少,应该使每一次复制的行数最大化,也就是每一次粘贴后就全选再复制。
如果输入数据恰好是2的x次方,复制的次数就是x。如果不是,就令x为2^x小于输入数据的最大整数,答案就是x+1。
var
n,t,ans:qword;
begin
while not eof do begin
read(n);
ans:=0;
t:=1;
while t*2<=n do begin
t:=t*2;
inc(ans);
end;
if t<n then inc(ans);
writeln(ans);
end;
end.