社区讨论

MnZn刚学OI第1天 求大佬指教 qwq

SP870 BASE - Basically Speaking参与者 3已保存回复 11

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
11 条
当前快照
1 份
快照标识符
@lo16az6y
此快照首次捕获于
2023/10/22 15:54
2 年前
此快照最后确认于
2023/11/02 15:29
2 年前
查看原帖
CPP
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int char_to_int(char c) {//将字符转换为数字
	if(c>='0'&&c<='9') return c-'0';
	return c-'A'+10;
}
int pre_invert(int num,int digital,int base)//计算当前位置所表示的数
{
	return num*(pow(base,digital));
}
string str;
char c[1010];
int n_to_10(string str,int n)//将n进制数转化为10进制数
{
	int ans=0;
	int len=str.size();
	for(int i=len-1;i>=0;i--)
		c[len-1-i]=char_to_int(str[i]);
	for(int i=0;i<=len;i++)
		ans+=pre_invert(c[i],i,n);
	return ans;
}
string dic="0123456789ABCDEF";
string _10_to_m(int num, int m)//将10进制数转化为m进制数 
{
	string ans="";
	while(num!=0) //模拟短除法
	{
		ans+=dic[num%m];
		num/=m;
	}
	string turn="";  //倒取余数
	for (int i = ans.length()-1; i >= 0; i--) 
    	turn += ans[i];
	return turn; 
}
bool check(string qwq)
{
	if(qwq.size()-1>7)	return 0;
  	else	return 1;
}
int n,m;
int main() {
	while(cin>>str>>n>>m)
	{
		string answer=_10_to_m(n_to_10(str,n),m);
		if(check(answer))printf("%7s\n",answer.c_str());//t要以7右对齐输出
		else printf("  ERROR\n");
	}
	return 0;
}

回复

11 条回复,欢迎继续交流。

正在加载回复...