题目描述
自从windows7以后硬盘是否4k对齐,对于电脑的性能有很大影响,简而言之就是分配硬盘空间时大小正好为“4k”的倍数。
现在我们想将一个硬盘空间恰好用完,并且每一个分区都为2^n的整数倍,给你硬盘的大小请问个2^n最大是多少?
输入
第一行,一个整数N,表示下面将有N行每行一个k表示硬盘的大小(数据保证:N小于等于100000,k在int范围内的正数)。
输出
共N行,每行一个整数即最大的2^n
样例输入
3 4 36 72
样例输出
4 4 8
分析:先设一个数t=1;当n能被t整除,记录目前最大的数为t,t变为原来的二倍,如果t<=n且n仍能被t整除,记录目前最大的数为t。直到t>n为止。
#include<stdio.h>
typedef long long ll;
int t,i,j,n,x,sum;
int main()
{
scanf("%d",&x);//输入测试次数
while(x--)
{
scanf("%d",&n);
t=1;sum=0;
if(n==0)//特判n=0的情况
{
printf("0\n");
continue;
}
while(t<=n)//条件必须为t<=n
{
if(n%t==0)//如果n能被t整除,用sum记录目前最大的t
sum=t;
t*=2;//将t扩大2倍
}
printf("%d\n",sum);//输出最大的t
}
}