首先说要求
题目要求输入一个字符串,只有数字和大写字母,然后需要转换成十进制的没,需要判定的是基数和偶数,然后默认的进制需要自己设计,ok下面开始简答分析。
进制转换的说明
其实进制转换也就是乘以基数的多少次方,然后相加即可。下面直接上代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| int StrtoBool(string &str, int r) { int ans = 0; // 进制转换 for(int i = 0; i != str.size(); i ++) { ans *= r; if(str[i] >= '0' && str[i] <= '9') ans += str[i] - '0'; else if(str[i] >= 'A' && str[i] <= 'Z') ans += str[i] - 'A' + 10; } return ans % 2; //结果是只看奇数和偶数的 }
|
十进制转换为任意进制
一般算法是除以基数,然后倒着取数,显然是栈的结构,先入后出。下面直给出完整版的代码:
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
| #include<iostream> #include<stack> using namespace std;
int main() { int n = 0, r = 10; stack<char> s; //全部存大写字母 cin >> n >> r; //数字和进制(都是int类型的)
while(n) { char tmp ; tmp = n%r; if(tmp >= 0 && tmp <= 9) tmp += 48; // 得到字符的0-9 else tmp += 55; // 得到大写的数字(暂时没有处理Z以后的) s.push(tmp); n /= r; } for(;!s.empty();) { cout << s.top(); s.pop(); } return 0; }
|