x+(8-x%8)%8
x=x%8==0?x:(x/8+1)*8
//一个数是8的倍数,其二进制的特点:最低三位全为0 //若x不是8的倍数,x先右移3位,自增之后再左移3位,便可以得到不小于x的、最近的8的倍数 //若x已是8的倍数,直接返回,否则运算后会变为2x int Test(int x) { int temp = 0; int res = 0; temp = x >> 3; res = (x % 8) ? (++temp) << 3 : x; return res; }
x += (8 - x%8);
#include<iostream> using namespace std; int main() { int x, y, pos; int es[10000]; cin >> x; for (int i = 0; i < 10000; i++) { es[i] = i * 8; if (x > es[i]) { y = es[i]; pos = i; } } y = es[pos + 1]; cout << y; return 0; }
void main() { int x; scanf("%d", &x); int y = (int)x/8; return (y+1)*8; }
cout<<“提升到8的倍数后的x值:"<<x<<endl ;
int Turn(int n) { if(n<0) // n是负数,输出错误 return -1; else { if(n%8==0) //n正好是8 的倍数,直接返回n return n; else { int temp=n/8; return 8*(temp+1); //n不是8的倍数,则将其提升到8的倍数并返回 } } }
8的倍数,二进制后三位为0。可用位运算来进行乘除,取巧了。 (x + 7) & (-8)
这道题你会答吗?花几分钟告诉大家答案吧!
扫描二维码,关注牛客网
下载牛客APP,随时随地刷题
整体思想就是最后和8相乘得到8的倍数
为了保证向上提升,加一个比8小的最大整数7,使其向上最接近8的倍数,然后整除8,再乘以8,记得到和X最接近的8的倍数。
参考:
http://www.dewen.io/q/8773/C%2FC%2B%2B%E4%B8%AD%E5%A6%82%E4%BD%95%E6%9C%89%E6%95%88%E5%9C%B0%E5%B0%86%E4%B8%80%E4%B8%AA%E6%95%B4%E6%95%B0a%E4%B8%8A%E8%B0%83%E8%87%B38%E7%9A%84%E5%80%8D%E6%95%B0%EF%BC%88%E6%9C%80%E5%B0%8F%E7%9A%84%E9%82%A3%E4%B8%AA%E6%95%B0%EF%BC%89