首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大数的十进制转换成二进制

大数的十进制转换成二进制

作者头像
kalifa_lau
发布2018-04-28 14:35:06
1.5K0
发布2018-04-28 14:35:06
举报
文章被收录于专栏:kalifaの日々kalifaの日々

要求输出最多有30位的十进制数的二进制表示。 10的30次方大概是2的100次方,最大的long long int最多也只能表示到2的64次方,所以用字符串来存这个数,然后通过遍历字符串的方式来模仿整数除法。

#include <cstdio>
#include <iostream>
#include <string.h>


using namespace std;
char sp[100];
int res[100];
int n,length;

bool isAllZero(char* str)
{
    for(int i=0;i<length;i++)
    {
        if((int)str[i]!=0)
        {
            return false;
        }
    }
    return true;
}

int main()
{
    scanf("%s",sp);
    length = strlen(sp);
   //下面把ascii码值转换成整数值 十进制0对应ascii码的48
    for(int i=0;i<length;i++)
    {
        sp[i] -= 48;
    }
    if(isAllZero(sp)) cout<<"0"<<endl;
    int counter = 0;
  //循环直到数组里所有数都为0
    while(!isAllZero(sp))
    {
        int pre = 0;
        for(int i=0;i<length;i++)
        {
           //除2取余
            int temp = (sp[i]+pre*10)/2;
            pre = (sp[i]+pre*10)%2;
            sp[i] = temp;
        }
        res[counter]=pre;
        counter++;
    }
    cout<<"counter is "<<counter<<endl;
    for(int i=counter-1;i>=0;i--)
    {
        cout<<res[i]<<" ";
    }
    return 0;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.03.10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档