题目描述
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}
题目描述
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}
题目描述
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}
题目描述
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
题目描述
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}
题目描述
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}
题目描述
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 }
题目描述
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}