What is the UESTC summer selection training program called?
- 内容介绍
- 文章标签
- 相关推荐
本文共计719个文字,预计阅读时间需要3分钟。
在编程语言中,如C++和Java,可以通过在数字前添加特定的前缀来指定整型常量的基数。例如,十六进制(基数16)常量以字符串0x开头。八进制(基数8)常量以字符串0开头。
A · Which Base is it Anyway?
Programming languages such as C++ and Java can prefix characters to denote the base of constant integer values. For example, hexadecimal (base 16) constants are preceded by the string “0x”. Octal (base 8) values are preceded by the character “0” (zero). Decimal (base 10) values do not have a prefix. For example, all the following represent the same integer constant, albeit in different bases.
0x1234
011064
4660
The prefix makes it clear to the compiler what base the value is in. Without the “0x” prefix, for example, it would be impossible for the compiler to determine if 1234 was hexadecimal. It could be octal or decimal.
For this problem, you will write a program that interprets a string of decimal digits as if it were an octal value, a decimal value or a hexadecimal value.
The first line of input contains a single decimal integer P, (1 £ P £ 10000), which is the number of data sets that follow. Each data set should be processed identically and independently.
Each data set consists of a single line of input. It contains the data set number, K, followed by a single space, followed by a string of at most 7 decimal digits.
Output
For each data set there is one line of output. The single output line consists of the data set number, K, followed by a space followed by 3 space separated decimal integers which are the value of the input as if it were interpreted to as octal, decimal and hexadecimal respectively. If the input value cannot be interpreted as an octal value, use the value 0.
Sample Input
Sample Output
4
1 1234
2 9
3 1777
4 129
1 668 1234 4660
2 0 9 9
3 1023 1777 6007
4 0 129 297
思路:进制转换即可,水题:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define maxn 200005
#define inf 0x3f3f3f3f
#define ii 0x3f
const int mod = 1e9 + 7;
ll read() {
ll x = 0, f = 1;
char ch = getchar();
while (ch < '0' || ch > '9') {
if (ch == '-') {
f = -1;
}
ch = getchar();
}
while (ch >= '0'&&ch <= '9') {
x = x * 10 + ch - '0';
ch = getchar();
}
return x * f;
}
ll quickpow(ll a, ll b) {
ll ans = 1;
while (b > 0) {
if (b % 2)ans = ans * a;
b = b / 2;
a = a * a;
}
return ans;
}
//char s[maxn];
int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a%b);
}
void s(ll n,ll k){
ll ans=0;
ll j=0;
ll flag=0;
while(n>0){
if(n%10>=k){
flag=1;
break;
}
ans+=(n%10)*quickpow(k,j);
j++;
n=n/10;
}
if(flag)cout<<0;
else cout<<ans;
}
int main() {
// ios::sync_with_stdio(false);
ll t;
cin>>t;
ll n;
ll i;
while(t--){
cin>>i>>n;
cout<<i<<' ';
s(n,8);
cout<<' ';
s(n,10);
cout<<' ';
s(n,16);
cout<<endl;
}
}
本文共计719个文字,预计阅读时间需要3分钟。
在编程语言中,如C++和Java,可以通过在数字前添加特定的前缀来指定整型常量的基数。例如,十六进制(基数16)常量以字符串0x开头。八进制(基数8)常量以字符串0开头。
A · Which Base is it Anyway?
Programming languages such as C++ and Java can prefix characters to denote the base of constant integer values. For example, hexadecimal (base 16) constants are preceded by the string “0x”. Octal (base 8) values are preceded by the character “0” (zero). Decimal (base 10) values do not have a prefix. For example, all the following represent the same integer constant, albeit in different bases.
0x1234
011064
4660
The prefix makes it clear to the compiler what base the value is in. Without the “0x” prefix, for example, it would be impossible for the compiler to determine if 1234 was hexadecimal. It could be octal or decimal.
For this problem, you will write a program that interprets a string of decimal digits as if it were an octal value, a decimal value or a hexadecimal value.
The first line of input contains a single decimal integer P, (1 £ P £ 10000), which is the number of data sets that follow. Each data set should be processed identically and independently.
Each data set consists of a single line of input. It contains the data set number, K, followed by a single space, followed by a string of at most 7 decimal digits.
Output
For each data set there is one line of output. The single output line consists of the data set number, K, followed by a space followed by 3 space separated decimal integers which are the value of the input as if it were interpreted to as octal, decimal and hexadecimal respectively. If the input value cannot be interpreted as an octal value, use the value 0.
Sample Input
Sample Output
4
1 1234
2 9
3 1777
4 129
1 668 1234 4660
2 0 9 9
3 1023 1777 6007
4 0 129 297
思路:进制转换即可,水题:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define maxn 200005
#define inf 0x3f3f3f3f
#define ii 0x3f
const int mod = 1e9 + 7;
ll read() {
ll x = 0, f = 1;
char ch = getchar();
while (ch < '0' || ch > '9') {
if (ch == '-') {
f = -1;
}
ch = getchar();
}
while (ch >= '0'&&ch <= '9') {
x = x * 10 + ch - '0';
ch = getchar();
}
return x * f;
}
ll quickpow(ll a, ll b) {
ll ans = 1;
while (b > 0) {
if (b % 2)ans = ans * a;
b = b / 2;
a = a * a;
}
return ans;
}
//char s[maxn];
int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a%b);
}
void s(ll n,ll k){
ll ans=0;
ll j=0;
ll flag=0;
while(n>0){
if(n%10>=k){
flag=1;
break;
}
ans+=(n%10)*quickpow(k,j);
j++;
n=n/10;
}
if(flag)cout<<0;
else cout<<ans;
}
int main() {
// ios::sync_with_stdio(false);
ll t;
cin>>t;
ll n;
ll i;
while(t--){
cin>>i>>n;
cout<<i<<' ';
s(n,8);
cout<<' ';
s(n,10);
cout<<' ';
s(n,16);
cout<<endl;
}
}

