题目:
给定一个整数Q(2<=Q<=10),一个非空字符串,以及另一个整数T(2<=T<=10), 编程要求过滤掉字符串中所有非Q进制数对应的字符组成一个新的字符串,该字符串无正负号,将该字符串表示的Q进制数转换为T进制数的字符串输出。
输入格式:
第一行输入一个整数Q, 代表Q进制(2<=Q<=10)
第二行输入以回车结束的一行非空字符串。
第三行输入一个整数T, 代表要转换成T进制
输出格式:
输出转换后的T进制数字符串。
输入样例:
10
15
2
输出样例:
1111
思路:
首先读入一个Q进制的数,根据进制的转换,我们可以把它换成十进制的数字(但是这里记得是×q,而不是×10,后面测试的时候发现了这个问题)切换之后,再把这个十进制的数字换成T进制,就是依次除以T,取它的余数,最后倒过来输出即可(因此这里用栈也可以,先进后出)
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
/*
第一行输入一个整数Q, 代表Q进制(2<=Q<=10)
第二行输入以回车结束的一行非空字符串。
第三行输入一个整数T, 代表要转换成T进制
*/
int main()
{
ll q, t, sum = 0;
char ch;
scanf("%lld", &q);
//读取换行符
getchar();
//计算这个数字有多大
while ((ch = getchar()) != '\n')
{
if (ch >= '0' && ch <= '0' + q - 1)
{
sum = sum * q + (ch - '0');
}
}
//进行切换进制
scanf("%lld", &t);
vector<ll>vec;
//int yu;
for (int i = sum; i != 0;)
{
vec.push_back(i % t);
i = i / t;
}
for (int i = vec.size() - 1; i >= 0; --i)
{
cout << vec[i];
}
return 0;
}