#include <iostream>
#include <string>
using namespace std;
int pow(int num,int cifang)
{
int zancun=num;//我怕影响实参。
// if(cifang!=0)
for(int i=1;i<cifang;i++)
zancun*=num;
return zancun;
}
long long str2_long10(string num)
{
long long cifang=0,result=0;
for(int i=num.size()-1;i>=0;i--)//按权展开。
{
result+=int(num[i]-'0')*pow(2,cifang);//不能用STL模板库pow()会负数。
cifang++;
}
return result;
}
string long10_str2(long long num)
{
string result="";
if(num==0)
return "0";
long long zancun=num;//怕改变实参。
while(zancun!=0)
{
result+=char((zancun%2)+'0');
zancun/=2;
}
string result2;
if(result.size()!=32)
for(int i=0;i<32-result.size();i++) //好坑,要补全“0”
result2+='0';
for(int j=result.size()-1;j>=0;j--)//反转字符串
result2+=result[j];
return result2;
}
int main()
{
long long n;
string a,b,c;
cin>>n;
a=long10_str2(n);
b=c="";
for(int i=0;i<=15;i++)
b+=a[i];
for(int i=16;i<=31;i++)
c+=a[i];
a=c+b;
cout<<str2_long10(a)<<endl;
return 0;
}
第八个测试点:
输入:19880516
输出:1514406192
正确输出:1514406191
我的代码哪错了?怎么有误差?
帮忙看一下。