问题标题: 酷町堂:3867快速进制转换3为什么错?

0
0
已解决
杨晨溪
杨晨溪
新手守护
新手守护

题目描述 Description

将一个八进制数转化为一个二进制数。

输入描述 Input Description

一行,一个八进制下的整数

输出描述 Output Description

这个八进制数对应的二进制结果

样例输入 Sample Input

 

1234567654321

样例输出 Sample Output

 

1010011100101110111110101100011010001

数据范围及提示 Data Size & Hint

八进制数转换得到的十进制数结果有可能超过long long。

#include<bits/stdc++.h>
using namespace std;
string num[]={"000","001","010","011","100","101","110","111"};
string f(string s)
{
    int sum=0,j=1;
    if(s.size()==1)
    {
        for(int i=s.size()-1;i>=0;i--)
        {
            sum=sum+(s[i]-'0')*j;
            j*=2;
        }
        return num[sum];
    }
    string s1=s.substr(s.size()-1,1);
    string s2=s.substr(0,s.size()-1);
    return f(s2)+f(s1);
}
int main()
{
    string s,ss;
    cin>>s;
    ss=f(s);
for(int i=1;i<=3;++i)
if (ss[i]=='1') break;
else ss[i]='~';
for(int i=1;i<=ss.size();++i)
if (ss[i]!='~')
cout<<ss[i];
    return 0;
}

 


0
已采纳
赵逸凡
赵逸凡
初级启示者
初级启示者

酷町堂的确定进制转换是不能用万能转换写的,你可以看

八进制

1=二进制1

2=二进制10

3=二进制11

4=二进制100

....

所以,取八进制的两位来判断

0
0
潘晨皓
潘晨皓
高级天翼
高级天翼

我认为你应该用long long 

0
我要回答