【问题描述】
编写函数实现给定一个长度为16的"0","1"序列和一个正整数n,输出二进制序列循环左移n位后所表示的10进制数,不考虑符号位。
禁止使用C++自带的二进制串转化为数字的函数。测试样例保证n<100,n>=0。
【输入形式】从标准输入输入二进制串和正整数n,空格隔开
【输出形式】二进制串循环左移n位后所表示的10进制数
【样例输入】0000111100001111 2
【样例输出】15420
【样例说明】循环左移2位后的二进制串为0011110000111100
#include<bits/stdc++.h>
using namespace std;
string s;
int n;
int turn(string s);
int solve(string s,int n)//循环移位
{
int ans=0;
string t;
if(n>=16) return 0;
t=s.substr(n,16-n);
for(int i=0;i<n;i++)
{
char c=s[i];
t.append(1,c);
}
ans=turn(t);
return ans;
}
int turn(string s)//二进制转换为十进制
{
int ant=0;
for(int i=s.size()-1;i>=0;i--)
{
ant+=(s[i]-'0')*pow(2,16-i-1);
}
return ant;
}
int main()
{
cin>>s>>n;
//cin>>s;
//cout<<turn(s);
cout<<solve(s,n);
return 0;
}