进制转换类问题

1178进制转换

题目描述

Time Limit: 1000 ms
Memory Limit: 32768 mb

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

输入描述:

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

输出描述:

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

输入样例:

10
21
33
48

输出样例:

10
21
311
41000
 1#include<iostream>
 2#include<array>
 3#include<string>
 4using namespace std;
 5
 6string s;
 7array<int,40> num;
 8array<int,300> buf;
 9
10int main(){
11    while(cin>>s){
12        int strlen=s.size();
13        for(int i=0;i<strlen;i++){
14            num[i]=s[i]-'0';
15        }
16        int cnt=0;
17        int i=0;
18        while(i<strlen){
19            buf[cnt++]=num[strlen-1]%2;
20            int c=0;
21            for(int j=i;j<strlen;j++){
22                int tmp=num[j];
23                num[j]=(num[j]+c)/2;
24                if(tmp%2==1){
25                    c=10;}
26                else{
27                    c=0;}
28                }
29            if(num[i]==0){
30                i++;}
31            }
32        for(int i=cnt-1;i>=0;i--){
33            cout<<buf[i];
34        }
35        cout<<endl;
36    }
37    return 0;
38}

1454反序数

题目描述

Time Limit: 1000 ms
Memory Limit: 256 mb

设N是一个四位数,它的9倍恰好是其反序数(例如:1234的反序数是4321)
求N的值

输入描述:

1程序无任何输入数据。

输出描述:

1输出题目要求的四位数,如果结果有多组,则每组结果之间以回车隔开。
 1#include<iostream>
 2#include<array>
 3using namespace std;
 4
 5int num;
 6
 7bool judge(int num){
 8    int reverse_num = num*9;
 9    array<int,4> tmp;
10    int i=0;
11    while(reverse_num){
12        tmp[i++]=reverse_num%10;
13        reverse_num/=10;
14    }
15    if(num==tmp[0]*1000+tmp[1]*100+tmp[2]*10+tmp[3]*1)
16    {
17        return true;
18    }
19    return false;
20}
21
22int main(){
23    for(int i=1000;i<1112;i++){
24        if(judge(i)){
25             cout<<i<<endl;
26        }
27    }
28    return 0;
29}

1259进制转换2

题目描述

Time Limit: 1000 ms
Memory Limit: 256 mb

写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串(注意可能存在的一个测试用例里的多组数据)。

输入描述:

1输入一个十六进制的数值字符串。

输出描述:

1输出该数值的十进制字符串。

输入样例:

10xA

输出样例:

110
 1#include<iostream>
 2#include<string>
 3using namespace std;
 4
 5string str;
 6
 7int main(){
 8    while(cin>>str){
 9        unsigned long long ans=0;
10        int len=str.size();
11        for(int i=2;i<len;i++){
12            ans*=16;
13            if(str[i]>='0'&&str[i]<='9'){
14                 ans+= str[i] - '0';
15            }
16            else{
17                 ans+=str[i]-'A'+10;
18            }
19        }
20        cout<<ans<<endl;
21    }
22    return 0;
23}

1176十进制和二进制

题目描述

Time Limit: 1000 ms
Memory Limit: 32768 mb

对于一个十进制数A,将A转换为二进制数,然后按位逆序排列,再转换为十进制数B,我们称B为A的二进制逆序数。例如对于十进制数173,它的二进制形式为10101101,逆序排列得到10110101,其十进制数为181,181即为173的二进制逆序数。

输入描述:

1一个1000位(即10^999)以内的十进制数。

输出描述:

1输入的十进制数的二进制逆序数。

输入样例:

1173

输出样例:

1181
1while True:
2    try:
3        print(int(bin(int(input())).replace('0b','')[-1::-1],2))
4    except:
5        break

1380二进制数

题目描述

Time Limit: 1000 ms
Memory Limit: 256 mb

大家都知道,数据在计算机里中存储是以二进制的形式存储的。 有一天,小明学了C语言之后,他想知道一个类型为unsigned int 类型的数字,存储在计算机中的二进制串是什么样子的。 你能帮帮小明吗?并且,小明不想要二进制串中前面的没有意义的0串,即要去掉前导0。

输入描述:

1每行有一个数字n(0<=n<=10^8),表示要求的二进制串。

输出描述:

1输出共T行。每行输出求得的二进制串。

输入样例:

123

输出样例:

110111
 1#include<iostream>
 2#include<vector>
 3using namespace std;
 4int main(){
 5    int n;
 6    while(cin>>n){
 7        vector<int> bi;
 8        while(n!=0){
 9            bi.push_back(n%2);
10            n/=2;
11        }
12        for(auto it=bi.rbegin();it!=bi.rend();it++){
13            cout<<*it;
14        }
15        cout<<endl;
16    }
17    return 0;
18}

1417八进制

题目描述

Time Limit: 1000 ms
Memory Limit: 256 mb

输入一个整数,将其转换成八进制数输出。

输入描述:

1输入包括一个整数N(0<=N<=100000)。

输出描述:

1可能有多组测试数据,对于每组数据,
2输出N的八进制表示数。

输入样例:

17
28
39

输出样例:

17
210
311
 1#include <iostream>
 2#include <vector>
 3using namespace std;
 4int main()
 5{
 6    int n;
 7    while(cin >> n){
 8        vector<int> mid;
 9        while(n > 0){
10            int temp = n%8;
11            mid.emplace_back(temp);
12            n = n/8;
13        }
14        for(int i = mid.size()-1;i >= 0;i--){
15            cout<<mid[i];
16        }
17        cout<<endl;
18    }
19    return 0;
20}

1422进制转换

题目描述

Time Limit: 1000 ms
Memory Limit: 256 mb

将M进制的数X转换为N进制的数输出。

输入描述:

1输入的第一行包括两个整数:M和N(2<=M,N<=36)。
2下面的一行输入一个数X,X是M进制的数,现在要求你将M进制的数X转换成N进制的数输出。

输出描述:

1输出X的N进制表示的数。

输入样例:

110 2
211

输出样例:

11011
 1#include<iostream>
 2#include<string>
 3#include<vector>
 4using namespace std;
 5
 6long long m,n;
 7string x;
 8
 9//通过十进制搭桥做转换
10int main() {
11    cin>>m>>n;
12    cin>>x;
13
14    if(x == "0"){
15        cout << 0;
16        return 0;
17    }
18
19    long long ans = 0;
20    int len = x.size();
21    for (int i = 0; i < len; i++) {
22            ans = ans * m;
23            if (x[i] >= '0' && x[i] <= '9') ans += (x[i] - '0');
24            else ans += (x[i] - 'A') + 10;
25    }
26    vector<char> out;
27    while (ans > 0) {
28        int w = ans % n;
29        if (w < 10) out.push_back(w + '0');
30        else out.push_back((w-10) + 'a');
31        ans /= n;
32    }
33    for (auto it =out.rbegin();it!=out.rend();it++) {
34        cout<<*it;
35    }
36    cout<<endl;
37    return 0;
38 }

1097负二进制

题目描述

Time Limit: 1000 ms
Memory Limit: 256 mb

二进制转换的问题,想必大家都没有问题了吧,比如给你一个十进制数13,其对应的二进制表示为:1101。因为13=12^3+12^2+02^1+12^0.江鸟整天胡思乱想,现在他想到一个问题:如果将平时二进制转换过程中的基数2变成-2,那么转换过来的数将又是什么呢?江鸟将这种转换方式称为“负二进制转换”,为了让大家接受他的理论,他举了个例子如下:
1*(-2)^3+1*(-2)^2+0*(-2)^1+1*(-2)^0=-3,所以-3的该种转换为1101.

输入描述:

1有多组测试数据。 输入为一个整数M.-100000<=M<=100000

输出描述:

1输出该种转换得到的结果(输出结果为只有0和1表示的一个串)

输入样例:

1-3

输出样例:

11101
 1#include<bits/stdc++.h>
 2using namespace std;
 3int main(){
 4    int m;
 5    char a[105];//多组数据 ;且要注意,字符型数组,定型,要加‘’
 6    //要注意,在题设下,余数只有0、1之分; 以及被除公式
 7    while(cin>>m){
 8        if(m==0) printf("0");//要特地考虑0的情况
 9        int p=0;
10        while(m!=0){
11            if(m%-2==0){//这里我分类讨论了一下,如果可以被-2整除,那无论是正数还是负数,都可以应用同一种情况
12                a[p++]='0';
13                m=m/-2;
14            }else {//此时是不能除尽的情况
15                a[p++]='1';
16                m=(m-1)/-2;//这里很好理解,不管正负数,余数为1,意味着商和余数的积与原来的被除数都差了1,那么要补充这个平衡,就要在被除数上减掉1;
17            }
18         }
19        for(int i=p-1;i>=0;i--) {
20        // printf("%c",a[i]);
21            cout<<a[i];
22        }
23        cout<<endl;
24     }
25    return 0;
26}