河北大学程序设计训练营
[TOC]
day16每日一题讲解
题目:
2-2 进制转换(Q进制转换成T进制) (25分)
给定一个整数Q(2<=Q<=10),一个非空字符串,以及另一个整数T(2<=T<=10), 编程要求过滤掉字符串中所有非Q进制数对应的字符组成一个新的字符串,该字符串无正负号,将该字符串表示的Q进制数转换为T进制数的字符串输出。
输入格式:
第一行输入一个整数Q, 代表Q进制(2<=Q<=10)
第二行输入以回车结束的一行非空字符串。
第三行输入一个整数T, 代表要转换成T进制
输出格式:
输出转换后的T进制数字符串。
输入样例:
输出样例:
做题思路:
这题属于比较简单的一类题,进制转换可能是每一个学程序的人都会接触到的内容,所以这里就不再赘述了。唯一需要值得注意的一点是,题目中要求 编程要求过滤掉字符串中所有非Q进制数对应的字符组成一个新的字符串,需要过滤的字符可能不止是字符,也有可能是其他符号(包括空格等),所以读入时需要一行getline,去除字符的时候也应该判断这个字符是否在字符的ASCII码内,不然最后一个测试点很有可能会发生错误。
AC代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| #include<iostream> #include<cmath> #include<algorithm> using namespace std; int main(){ int source; string n; int target; cin>>source; getchar(); getline(cin,n); cin>>target; for(auto it=n.begin();it!=n.end();it++){ if(*it-'0'>=source||*it-'0'<0){ n.erase(it); it--; } } int to_ten=0; int p=0; for(auto it=n.rbegin();it!=n.rend();it++){ to_ten+=(*it-'0')*pow(source,p); p++; } if(to_ten==0){ cout<<0<<endl; return 0; } string to_target=""; while(to_ten){ to_target+=(to_ten%target+'0'); to_ten/=target; } reverse(to_target.begin(),to_target.end()); cout<<to_target<<endl; return 0; }
|