题目链接
题目详情
给定一个 n 位 进制数 X 和一个 m 位 进制数 Y。
X 和 Y 都为正整数,且都不含前导 0。
请你比较它们的大小。
输入格式
第一行包含两个整数 。
第二行包含 n 个整数 ,表示 X 的各位数字,它们按照从最高有效位到最低有效位的顺序给出。
第三行包含两个整数 。
第四行包含 m 个整数 ,表示 Y 的各位数字,它们按照从最高有效位到最低有效位的顺序给出。
X 和 Y 的各位数字在输入中均按十进制表示给出。
输出格式
共一行:
- 如果 X<Y,则输出
<。 - 如果 X>Y,则输出
>。 - 如果 X=Y,则输出
=。
数据范围
前 6 个测试点满足 。
所有测试点满足 。
输入样例1:
6 2
1 0 1 1 1 1
2 10
4 7
输出样例1:
=
输入样例2:
3 3
1 0 2
2 5
2 4
输出样例2:
<
解题思路
这道题很简单,就是进制的转换,而且是其他进制转换为10进制,很容易。这里我定义了一个函数n_to_10()。第一个参数n为进制数,第二个参数q为存储数的数组,第三个参数是数组的长度。然后转换就是依次求每一位的 数 * 该位的权重,再求和即可。最后比较两个十进制数的大小输出即可!
AC代码
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<cmath>
using namespace std;
#define int long long
#define endl '\n'
typedef long long ll;
const int N =1000;
int a[N],b[N];
int n_to_10(int n, int q[], int len)
{
int res = 0;
for(int i=1;i<=len;i++)
{
res += q[i] * pow(n,len-i);
}
return res;
}
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n,x,m,y;
cin >> n >> x;
for(int i=1;i<=n;i++) cin>>a[i];
cin>>m>>y;
for(int i=1;i<=m;i++) cin>>b[i];
int s1 = n_to_10(x,a,n);
int s2 = n_to_10(y,b,m);
//cout<<s1<<endl<<s2;
if(s1>s2) cout<<">";
else if(s1<s2) cout<<"<";
else cout<<"=";
return 0;
}