目录
ll x = 0;
for(int i = 1;i <= n;++ i)
{
x = x*k + a[i];
}
cout<< x <<endl;
ll x;cin>>x;
while(x)a[++cnt]=x%k,x/=k;
reverse(a+1,a+1+cnt);//反转使高位在1
请问十六进制数 2021ABCD 对应的十进制是多少?
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
using ll = long long;
const int N = 50;
int a[N];
int main()
{
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
string s = "2021ABCD";
for (int i = 0;i < s.length(); ++ i)
{
if ('0' <= s[i] && s[i] <= '9')a[i + 1] = s[i] - '0';
else a[i + 1] = s[i] - 'A' + 10;
}
ll x = 0;
for (int i = 1; i <= s.length(); ++i)
{
x = x * 16 + a[i];
}
cout << x << endl;
return 0;
}
九进制正整数 (2022)9转换成十进制等于多少?
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
using ll = long long;
const int N = 50;
int a[N];
int main()
{
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int n = 4;
string s = "2022";
for (int i = 1; i <= 4; ++i)a[i] = s[i - 1] - '0';
ll x = 0;
for (int i = 1; i <= n; ++i)
{
x = x * 9 + a[i];
}
cout << x;
return 0;
}
给定一个 N 进制数 S,请你将它转换为 M 进制。
第一行为一个整数T,表示测试数据数量。 (1≤T≤1051≤T≤105)
每个测试用例包含两行,第一行包含两个整数 N,M。
第二行输入一个字符串 S,表示 N 进制数。
数据范围保证:2≤N,M≤16,若 N≥10,则用 A~F表示字码 10~15。保证 S 对应的十进制数的位数不超过 10。
输出共 T,每行表示一组数据的答案。
2
2 10
10101
11 2
1793A5068
21
10101111001010100111010101011
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long ll; int a[1000];
char ch[] = { '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' };
void solve()
{
int n, m; cin >> n >> m;//n进制转换为m进制
string s; cin >> s;
for (int i = 0; i < s.length(); ++i)
{
if ('0' <= s[i] && s[i] <= '9')a[i+1] = s[i] - '0';
else a[i+1] = s[i] - 'A' + 10;
}
ll x = 0;
for (int i = 1; i <= s.length(); i++)
{
x = n * x + a[i];//s的十进制
}
string ans;
while (x)
{
ans += ch[x % m];
x /= m;
}
reverse(ans.begin(), ans.end());
cout << ans << endl;
}
int main()
{
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int t; cin >> t;
while (t--)
{
solve();
}
return 0;
}