[sicily]1813. M进制数问题

1813. M进制数问题

Constraints

Time Limit: 1 secs, Memory Limit: 32 MB

Description

试用 C++的类来表示一般进制数。

给定 2 个n位m进制整数A和B,计算m进制数整数P = A / B (向下取整)与 Q = A % B的值。

Input

输入包含多个测试点。第一行为一个整数T,表示测试点数。

对于每个测试点第 1 行是进制 m 。第 2 行和第 3 行分别给出 m 进制整数 A 和 B。

所有 m 进制数的10进制表示均不超出int范围。

 

Output

对于每个测试点,第一行输出 m 进制数整数 P = A / B 的值,第二行输出 Q = A % B 的值。

Sample Input

1
16
29FA5
7

Sample Output

5FF3
0

#include <cstring>
#include <algorithm>
using namespace std;

//将M 进制转换为10进制
int changeToD(string s, int m)
{
	int len = s.size();
	int tmp, num=0;
	for(int i=0; i<len; i++)
	{
		if(s[i] >= '0' && s[i] <= '9')
			tmp = s[i] - '0';
		if(s[i] >= 'A' && s[i] <= 'Z')
			tmp = s[i] - 'A' + 10;
		num = num*m + tmp ;	
	}
	return num;
}
//将10进制转为M 进制
string changeToM(int num, int m)
{
	string table = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	string result = "";	
	string s = "";
	if(num == 0)
		return "0";
	int tmp = num;
	while(tmp != 0)
	{
		result = result + table[tmp%m];
		tmp = tmp/m;
	}	
	for(int i = result.size()-1; i>=0; i--)
	{
		s = s + result[i];
	}
	return s;
	
}

int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		int m;
		string A, B;
		cin>>m;
		cin>>A>>B;
		int a = changeToD(A, m);
		int b = changeToD(B, m);
		
		string result1 = changeToM(a/b, m);
		string result2 = changeToM(a%b, m);
		
		cout<<result1<<endl;
		cout<<result2<<endl;			
	} 
//	system("pause");
	return 0;	
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值