一开始我用进制来做这个题,也就是把十进制转二进制,然后把掉二进制掉转之后,再把二进制转成十进制,代码如下
#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;
}
心态都被自己整崩了从六十多行变成了十行
学了位运算之后两分钟搞完
呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵??????