openjudge 1.13.1 数制转换

OpenJudge - 01:数制转换


解题思路:

1.将一个n进制的数转化为m进制,那么可以利用十进制来过渡,先将n进制转化为十进制,再将十进制转化为m进制,除m取余,逆序排列

2.输入n和m还有一个字符串s,对字符串进行小写转为大写,便于统一处理,然后逆序遍历,字符串的最高位反而是数值的个位,如果该位置上是字母,需要变换为数字,乘以pow(s.length( )-1-i),添加到累加器sum中,记得开long long

3.然后对于sum进行数位分离,除m取余,将余数放入到ans数组中,然后缩小m倍

4.最后倒序输出ans数组,如果该位置数字是大于9的,输出对应的大写字母,否则,直接输出


#include<bits/stdc++.h>
using namespace std;
int ans[50];
int main()
{
	int n,m;
	string s;
	cin>>n>>s>>m;
	
	for(int i=0;i<=s.length()-1;i++)
	if(s[i]>='a'&&s[i]<='z')
	s[i]=s[i]-32;//将小写字母全部转化为大写字母
	
	long long sum=0;
	int num;
	for(int i=s.length()-1;i>=0;i--)
	{
		if(s[i]>='A'&&s[i]<='Z')//如果该位是字母 
		num=s[i]-55;//转化为数字 
		else//如果是数字 
		num=s[i]-'0';//系数就是s[i] 
		
		sum=sum+num*pow(n,s.length()-1-i);
    }//将n进制数全部转化为数字并转换成十进制 
    
    num=0;
    while(sum!=0)
    {
    	ans[++num]=sum%m;
    	sum=sum/m;
	}//将十进制数转化为m进制,除m取余,逆序排列 
	
	for(int i=num;i>=1;i--)//倒序输出,最高位在数组的最后一个位置 
	{
		if(ans[i]>=10)//如果该数字大于10 
		{
			cout<<(char)(ans[i]+55);//输出对应的大写字母 
		}
		else
		cout<<ans[i];//否则输出该数字 
	 } 
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值