上机考试复习(自用)
作者:
青橘子
,
2024-04-22 20:05:48
,
所有人可见
,
阅读 4
机试复习
1、进制转换
①x进制转十进制
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
char s[100010];
scanf("%s", &s);
int cnt = strlen(s);
long long ans = 0;
for (int i = 0; i < cnt; i ++ )
{
ans = ans * 16; //16可以更换为其他进制
if (s[i] > '0' && s[i] < '9') //若该字符在'0' ~ '9'之间
ans += s[i] - '0';
else if (s[i] > 'a' && s[i] < 'z') //若该字符为小写字母
ans += s[i] - 'a' + 10;
else ans += s[i] - 'A' + 10; //若该字符为大写字母
}
cout << ans;
}
②x进制转y进制
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 100010;
char s[N], out[N];
int cnt;
long long ans;
int main()
{
//x进制转y进制
int x = 2, y = 16;
scanf("%s", &s);
cnt = strlen(s);
for (int i = 0; i < cnt; i ++ )
{
ans = ans * x;
//若该字符在'0' ~ '9'之间
if (s[i] >= '0' && s[i] <= '9') ans += s[i] - '0';
//若该字符为小写字母
else if (s[i] >= 'a' && s[i] <= 'z') ans += s[i] - 'a' + 10;
//若该字符为大写字母
else ans += s[i] - 'A' + 10;
}
cout << ans << endl;
cnt = 0;
while (ans > 0)
{
int w = ans % y;
//若该字符在10以内
if (w < 10) out[cnt ++ ] = w + '0';
//若该字符为小写字母
else if (w >= 'a' && w <= 'z') out[cnt ++ ] = (w - 10) + 'a';
//若该字符为大写字母
else out[cnt ++ ] = (w - 10) + 'A';
ans /= y;
}
for (int i = cnt - 1; i >= 0; i -- )
printf("%c", out[i]);
printf("\n");
return 0;
}