问题标题: 酷町堂:2470 转换进制2 Wrong Answer:0分

0
0
已解决
王子健
王子健
初级天翼
初级天翼
#include<iostream>
using namespace std;
int s[1010];
int main()
{
    long long a,t=1;
    int n,ans=0,l=-1; 
    cin>>a;
    while(a)
    {
        n=a%10;
        ans+=n*t;
        t=t*8;
        a/=10;
    }
    cout<<ans;
    while(ans!=0)
    {
        s[++l]=ans%2;
        ans/=2;
    }
    for(int i=l;i>=2;i--)
        cout<<s[i];
    return 0;
}

 

请问这提哪里错了,请看到的大佬速回。

(下午就有课了)


0
已采纳
丁浩然
丁浩然
新手光能
新手光能

先把八进制转换为十进制,再把十进制转换为二进制:

8-10

while(n)
  {
    x=n%10;
    y+=(x*pow(8,s));
    n/=10;
    s++;
  }

10-2

 while(y)
  {
    p[++b]=y%2;
    y/=2;
  }
  for(int i=b; i>=1; --i)
    cout<<p[i];

 

0
0
宫西诚
宫西诚
修练者
修练者

不用这么麻烦

 l=a.size()-1;
    for(int i=0;i<=l;i++)
    {
       s=s+int(a[i]-48)*pow(8,l-i);
    }
        while(s!=0)
    {
        b=char(s%2+48)+b; 
        s=s/2;
    }
    cout<<b;

a,b都是字符串,s,l为longlong

宫西诚在2019-01-23 14:00:18追加了内容
#include<bits/stdc++.h> 
using namespace std;
int main()
{
    string a,b;
    int l=0;
    long long s=0;
    cin>>a;
    l=a.size()-1;
    for(int i=0;i<=l;i++)
    {
       s=s+int(a[i]-48)*pow(8,l-i);
    }
        while(s!=0)
    {
        b=char(s%2+48)+b; 
        s=s/2;
    }
    cout<<b;
    return 0;
}

 

我要回答