C++, 学习笔记

九度题目1138:进制转换

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

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

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

  • 思路:
  • 大整数,longlong存不下,用数组,模仿手写除法的思想。

  • 代码:
  • #include<iostream>
    #include<cstdio>
    #include<math.h>
    #include<string.h>
    using namespace std;
    int main(){
        int x,y;
        char n[100];
        char ans[100];
        while(cin>>n){
            int j=0,i;
            int sum=1;
            while(sum){
                sum=0;
                int len=strlen(n);
                for(i=0;i<len;i++){          
                    x=(n[i]-'0')%2; //余数
                    y=(n[i]-'0')/2; //商
                //  cout<<"x="<<x<<" y="<<y<<endl;
                    sum=sum+y;  //将商每一位都加起来,看看是否为0
                //  cout<<"sum="<<sum<<endl;
                    if(i==len-1){
                        ans[j++]=x+'0';  //得到一个最终的余数
                //      cout<<"ans="<<ans[j-1]<<" "<<ans[j]<<" "<<x<<endl;
                    }
                    else{
                        n[i+1]=n[i+1]+x*10;//把它当成是数字来看了
                    }
                    n[i]=y+'0';
            //      cout<<"n[i]="<<n[i]<<endl;
                }
            }
            for(i=j-1;i>=0;i--){
                cout<<ans[i];
            }
            cout<<endl;
        }
        return 0;
    }
    /**************************************************************
        Problem: 1138
        User: WZDCJ0206
        Language: C++
        Result: Accepted
        Time:230 ms
        Memory:1520 kb
    ****************************************************************/
    Be the First to comment.

    Leave a Comment

    您的电子邮箱地址不会被公开。

    此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

    皖ICP备2020019260号-2