九度-题目1138:进制转换

http://ac.jobdu.com/problem.php?pid=1138

题目描述:

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

输入:

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

输出:

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

样例输入:
0
1
3
8
样例输出:
0
1
11
1000
来源:
2008年北京大学软件所计算机研究生机试真题
十进制转化二进制最基本的还是除二取余法。这里只是将数字已字符串形式给出,核心的算法是没有改变的。

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

char binvec[1001];

using namespace std;

void decTobin(string str){
    int size=0;
    int len = str.size();
    int sum=1;  // 初始化sum不为0即可
    while(sum){
        sum=0;
        for(int i=0; i<len; i++)
        {
            int tmp=(str[i]-‘0‘)/2; //一个数除以2就是每个位除以2
            sum+=tmp;   //当这个数每个位全为0的时候,sum==0

            if(i==len-1){
                binvec[size++]=(str[i]-‘0‘) % 2+ ‘0‘;
            }
            else{
                str[i+1]=str[i+1]+(str[i]-‘0‘)%2*10;
            }

            str[i]=tmp+‘0‘;
        }
    }

}

void reverse_out(){
    //cout << binvec << endl;

    for(int i=strlen(binvec)-1; i>=0; i--){
        cout << binvec[i] ;
    }
    cout << endl;

}

int main()
{
    string str;
    while(cin>>str){
        memset(binvec, ‘\0‘, sizeof(binvec));
        decTobin(str);
        reverse_out();
    }
    return 0;
}

时间: 2024-10-14 09:06:19

九度-题目1138:进制转换的相关文章

oj---九度oj----大数---进制转换

struct bigInteger{ int digit[maxDigits]; int size; } 这里digit每一位的权重都乘以10000: 如果不是特别大的数,没必要:乘以10000后,把字符串转化为数字比较麻烦 #include<cstdio> #include<cstring> #define maxDigits 100 struct bigInteger{ int digit[maxDigits]; int size; void init(){ for(int i

【ACM】大数据+任意进制转换 jobdu 1080

[九度OJ] 1080 进制转换 题目描述: 将M进制的数X转换为N进制的数输出. 输入: 输入的第一行包括两个整数:M和N(2<=M,N<=36).下面的一行输入一个数X,X是M进制的数,现在要求你将M进制的数X转换成N进制的数输出. 输出: 输出X的N进制表示的数. 样例输入: 16 10 F 样例输出: 15 提示: 输入时字母部分为大写,输出时为小写,并且有大数据. 这题考察的比较综合,进制转换+大数据 很久没有做ACM的题目了,且拿这个练练手,大整数模板是用的王道论坛的模板-贴出来备

NOJ 1012 进制转换(十进制转换成任意进制)

题目: 进制转换 时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte总提交 : 1819            测试通过 : 525  题目描述 将一个十进制数N转换成R进制数输出,2≤R≤16,R≠10. 输入 多行.第一行指出以下一共有多少组数据,后续每行包含两个整数N和R,以空格分隔,-100000≤N≤100000,2≤R≤16,R≠10. 输出 多行.每行给出转换后的R进制数. 样例输入 37 223 12-4 

九度oj 题目1080:进制转换

题目描述: 将M进制的数X转换为N进制的数输出. 输入: 输入的第一行包括两个整数:M和N(2<=M,N<=36). 下面的一行输入一个数X,X是M进制的数,现在要求你将M进制的数X转换成N进制的数输出. 输出: 输出X的N进制表示的数. 样例输入: 16 10 F 样例输出: 15 提示: 输入时字母部分为大写,输出时为小写,并且有大数据. 这题初看起来另我头疼,考虑不难但是很麻烦 一开始想的比较绕,准备先把任意进制转换成10进制,再转化成n进制,于是写出了下面的代码 1 #include

HDU 4937 Lucky Number (数学,进制转换)

题目 参考自博客:http://blog.csdn.net/a601025382s/article/details/38517783 //string &replace(iterator first0, iterator last0,const_iterator first, const_iterator last); //把[first0,last0)之间的部分替换成[first,last)之间的字符串 /* 题意: 我们将3,4,5,6认为是幸运数字.给定一个十进制数n. 现在可以讲起任意转

JAVA之旅(一)——基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算

JAVA之旅(一)--基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算 Android老鸟重新学一遍JAVA是什么感觉?枯燥啊,乏味啊,而且归纳写博客,都是很痛苦的事情,但是程序之路这么长,你必须精通的不能再精通一门语言才行(有点说大了哈),但是最起码你要如鱼得水吧,我准备的资料有: JAVA编程思想 深入浅出JAVA 黑马,传智,慕课,极客学院等-的视频 Google搜索 我们既然是重新学一遍,那我们尽量就是用记事本去敲代码好了,这里我用notep

大数进制转换问题

在数据结构课关于栈的这一章中,我们都学过用"模2取余法"来将一个10进制数转换为一个二进制数,进而可以推广到"模n取余法",经其转换为n进制(n任意指定). 确实,这是一个很基础的题目,可你是否想过如果这个10进制数是一个大数(其位数可能上千位,此时用一般数据类型肯定是会溢出的),那么这个问题又如何来求解呢? 当然,也许你会说很简单嘛,自己写一个大数类(当然至少要写一个大数除法才行),或者你用的是Java这种现代化语言,就更轻松了,直接用BigInteger这样的大

hdu 4937 Lucky Number ( 进制转换+枚举 )

题意: 有一个数n,问有多少个进制x(基数)使得n转换为x进制后的数字中只有3.4.5.6四个数. 算法: 对于只有一位数的情况,显然3.4.5.6都应该输出-1. 如果有2位数,假设这2位中高位为a,低位为b,进制为base,则 n = a * base + b,解一元一次方程即可. 如果有3位数,假设这3为从高到低分别为a.b.c,进制为base,则 n = a * base * base + b * base + c,即一元二次方程即可. 如果位数>= 4,可以暴力枚举进制数.base>

ACM——进制转换

http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1012 进制转换 时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte总提交:1362            测试通过:395 描述 将一个十进制数N转换成R进制数输出,2≤R≤16,R≠10. 输入 多行.第一行指出以下一共有多少组数据,后续每行包含两个整数N和R,以空格分隔,-100000