本人思路没错,代码错误,求修改,很简单!!

代码错误,请教修改
TooY0ung的数学难题
**描述
TooY0ung给定四个无符号32位整数a,b,c,d,求A=a+b×2^32+c×2^64+d×2^96

是否是4的幂次。

注:若一个数是4的幂次,则存在一个整数n使得4^n=A。

输入
输入有多组数据,每组数据有四个无符号32位整数a,b,c,d.

输出
每组数据输出一行,若a+b×2^32+c×2^64+d×2^96

是4的幂次,输出"Yes",否则输出"No"(不含双引号)

输入样例 1

4 0 0 0
1 2 3 4
0 0 0 1
输出样例 1

Yes
No
Yes
提示

无符号32位整数(unsigned int)范围是[0,2^32-1]

数据范围:

对于20%的数据,输入只包含一组数据。

对于额外的20%数据,输入只包含三组数据。

对于额外的60%的数据,输入数据组数不限。

给个提示:

关于如何进行多组数据输入:

while(cin>>a>>b>>c>>d)即可
如下是本人代码

#include<bits/stdc++.h> 
using namespace std;
bool simi(int n){
      if(n>=1&&(n&(n-1))==0)cout<<"Yes";
      else cout<<"No";
}
int main(){
    int a,b,c,d,z;
    while(cin>>a>>b>>c>>d){
    z=a+b*pow(2,32)+c*pow(2,64)+d*pow(2,96);
    simi(z);
    }
    return 0;
}

多多指导谢谢!

输出结果看看

用二进制方式计算,可以用长度128位的数组表示
4的n次幂就是2的2n次幂,结果二进制就是最高位为1后面跟偶数位0

#include <iostream>
using namespace std;

void swap(int* arr) { if (arr[0] < arr[1]) { int t = arr[0]; arr[0] = arr[1]; arr[1] = t; }}
void insert(int * arr, int n) { if (n > arr[0]) { arr[1] = arr[0]; arr[0] = n; } else if (n > arr[1]) { arr[1] = n; } }

int main()
{
    int n;
    cin >> n;
    int cntodd = 0;
    int cnteven = 0;
    int odd[2];
    int even[2];
    for (int i = 0; i < n; i++)
    {
        int curr;
        cin >> curr;
        if (curr % 2 == 1)
        {
            if (cntodd == 0)
            {
                odd[0] = curr;
                cntodd++;
            }
            else if (cntodd == 1)
            {
                odd[1] = curr;
                cntodd++;
                swap(odd);
            }
            else
            {
                insert(odd, curr);
            }
        }
        else
        {
            if (cnteven == 0)
            {
                even[0] = curr;
                cnteven++;
            }
            else if (cnteven == 1)
            {
                even[1] = curr;
                cnteven++;
                swap(even);
            }
            else
            {
                insert(even, curr);
            }
        }
    }
    if (cnteven < 2 && cnteven < 2)
        cout << -1;
    else if (cnteven < 2)
        cout << odd[0] + odd[1];
    else if (cntodd < 2)
        cout << even[0] + even[1];
    else
        cout << (odd[0] + odd[1] > even[0] + even[1] ? odd[0] + odd[1] : even[0] + even[1]);
    return 0;
}

看看这个是否超时