数据结构进制转换

2022.10.24这题的0输入输出却让我很艰难。最后就把函数题变编程题了。题目2-9,这个2-16,找的高中同学。


任务描述

本关任务:将十进制非负整数 n 转换成 base(2≤base≤9)进制数,并按位输出。
例如,若输入8和2,则应输出1000(即十进制数8转换成二进制表示是1000)。

编程要求

根据提示,在右侧编辑器补充完整void ten2other(int n, int base)的代码,将十进制非负整数 n 转换成 base(2≤base≤9)进制数,并按位输出。

测试说明

平台会对你编写的代码进行测试:

输入格式
输入两个参数。第一个为n,第二个为base。

输出格式
n转换为base进制的结果。

输入输出样例
输入1

6 4

输出1
12

输入2
10 2

输出2
1010

开始你的任务吧,祝你成功!

C++代码

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;

char s[10005];
int main() {
	int x,n;
	//scanf("%d%d",&x ,&n);
	while(cin>>x>>n) {
		int count = 0;
		if(x == 0) {
			cout<<"0";
		}
		if(n < 10) {
			int r;
			if(x < 0) {
				int x1 = abs(x);
				while(x1 != 0) {
					r = x1 % n;
					s[count] = r + '0';
					count++;
					x1 /= n;
				}
				printf("-");
				for(int i = count - 1 ; i >=0 ; i--) {
					printf("%c",s[i]);
				}
			} else {
				while(x != 0) {
					r = x % n;
					s[count] = r + '0';
					count++;
					x /= n;
				}
				for(int i = count - 1 ; i >=0 ; i--) {
					printf("%c",s[i]);
				}
			}
		} else {
			int r;
			if(x < 0) {
				int x1 = abs(x);
				while(x != 0) {
					r = x % n;
					if(r == 10) {
						s[count] = 'A';
					} else if(r == 11) {
						s[count] = 'B';
					} else if(r == 12) {
						s[count] = 'C';
					} else if(r == 13) {
						s[count] = 'D';
					} else if(r == 14) {
						s[count] = 'E';
					} else if(r == 15) {
						s[count] = 'F';
					} else {
						s[count] = r + '0';
					}
					count++;
					x /= n;
				}
				printf("-");
				for(int i = count - 1 ; i >=0 ; i--) {
					printf("%c",s[i]);
				}
			} else {
				while(x != 0) {
					r = x % n;
					if(r == 10) {
						s[count] = 'A';
					} else if(r == 11) {
						s[count] = 'B';
					} else if(r == 12) {
						s[count] = 'C';
					} else if(r == 13) {
						s[count] = 'D';
					} else if(r == 14) {
						s[count] = 'E';
					} else if(r == 15) {
						s[count] = 'F';
					} else {
						s[count] = r + '0';
					}
					count++;
					x /= n;
				}
				for(int i = count - 1 ; i >=0 ; i--) {
					printf("%c",s[i]);
				}
			}
		}
		cout<<endl;
	}
	return 0;
}

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值