进制转换(大数据)--C++实现

版权声明:本文为博主原创文章,未经博主允许不得转载 https://blog.csdn.net/zhang__shuang_/article/details/87469689

题目描述

将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。

输入描述:

多组数据,每行为一个长度不超过30位的十进制非负整数。
(注意是10进制数字的个数可能有30个,而非30bits的整数)

输出描述:

每行输出对应的二进制数。

输入

0
1
3
8

输出

0
1
11
1000

C++实现:

#include<iostream>
#include<string.h>
using namespace std;
int main(){
    char c[30];
    char b[200];
    int a[30];
    cin>>c;
    int Num=strlen(c);
    for(int i=0;i<Num;i++){
        a[i]=c[i]-'0';
    }
    int num=1;
    int k=0;
    int j=0;
    //判断num为0,若为0,表示a数组内所有位均<2,此时循环结束
    while(num){
        num=0;
        for(int i=0;i<Num;i++){
            //思路为每一位除以2,当前位为偶数,下一位为0,当前位为奇数,则下一位为当前位*10+下一位原值
            k=a[i]/2;
            num+=k;
            if(i==Num-1)
                b[j++]=a[i]%2+'0';
            else
                a[i+1]+=a[i]%2*10;
            a[i]=k;
        }
    }
    for(int i=j-1;i>=0;i--){
        cout<<b[i];
    }
    cout<<endl;
}

另一种实现:

#include<iostream>
#include<string.h>
using namespace std;
int main(){
    char c[30];
    int num[30];
    int re[150];
    while(cin>>c){
        int len=strlen(c);
        for(int i=0;i<len;i++){
            num[i]=c[i]-'0';
        }
        int r=1;
        int q=0;
        while(r){
            r=0;
            int next=0;
            int sum=0;
            for(int i=0;i<len;i++){
                //此处应与1比较,
                if(num[i]>=1)
                    r++;
                sum=num[i]+next*10;
                num[i]=sum/2;
                next=sum%2;
                if(i==len-1){
                    re[q++]=sum%2;
                }
            }
        }
        //注意最后的商0也压入了数组中,因此从q-2开始遍历
        for(int i=q-2;i>=0;i--)
            cout<<re[i];
        cout<<endl;
        
    }
}

猜你喜欢

转载自blog.csdn.net/zhang__shuang_/article/details/87469689