真的想太多啦!
查看原帖
真的想太多啦!
556815
M213楼主2022/3/20 20:20

真的想太多了,我太难。

一开始我用进制来做这个题,也就是把十进制转二进制,然后把掉二进制掉转之后,再把二进制转成十进制,代码如下

#include <bits/stdc++.h>
using namespace std;
unsigned long long ans;
int a[40];
string s;
void cinscanf(){
    scanf("%llu",&ans);
}
char inttochar(int c){
    return c+48;
}
void tentox(){
    int t=0;
    while(ans){
        a[t]=ans%2;
        ans/=2;
        t++;
    }
    for(int i=t-1,j=0;i>=0;i--,j++){
        s[j]=inttochar(a[i]);
    }
}
void work(){
    string c,d;
    for(int i=0;i<=15;i++){
        c[i]=s[i];
    }
    for(int i=16,j=0;i<=31;i++,j++){
        if(s[i]==0){
            d[j]=0;
        }else{
            d[j]=s[i];
    }
    s=d;
    s+=c;
}
void zeroa(){
    for(int i=0;i<=100000;i++){
        a[i]=0;
    }
}
int chartoint(char c){
    return c-'0';
}
void xtoten(){
    int len=s.length();
    for(int i=len-1;i>=0;i--){
        a[len-i-1]=chartoint(s[i]);
    }
    int w=1;
    for(int i=0;i<=100000;i++){
        ans+=w*a[i];
        w*=2;
    }
    cout<<ans;
}
int main()
{
    cinscanf();
    tentox();
    work();
    zeroa();
    xtoten();
    return 0;
}

结果整了半天愣是整了个寂寞呵呵呵

学习了位运算之后发现完全不用这么难呐

附上代码

#include <bits/stdc++.h>
using namespace std;
int main()
{
    unsigned long long n1;
    scanf("%llu",&n1);
    unsigned int n=n1;
    printf("%u",(n<<16)+(n>>16)+((n1>>32)<<32));
    return 0;
}

心态都被自己整崩了从六十多行变成了十行

用进制整了三四个小时,整了个寂寞。

学了位运算之后两分钟搞完

无语到了极点

呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵??????

2022/3/20 20:20
加载中...