15级卓工班选拔-硬盘4K对齐(水题)

题目描述

自从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
	}
}

猜你喜欢

转载自blog.csdn.net/basketball616/article/details/86645574