Which Base is it Anyway?(UVALive 7783)

本文介绍了一个编程挑战,要求解析字符串并将其解释为八进制、十进制或十六进制数值,然后输出相应的数值。文章提供了示例输入输出及代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Description

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.

Input

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

4
1 1234
2 9
3 1777
4 129

Sample Output

1 668 1234 4660
2 0 9 9
3 1023 1777 6007
4 0 129 297

题解:

对所给数进行判断,是否为8/10/16进制,并转换为对应数。

代码如下:

#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<string>
#include<vector>
#include<cmath>
#include<stack>
#include<queue>
#include<map>
#include<set>
#define max(a,b)   (a>b?a:b)
#define min(a,b)   (a<b?a:b)
#define swap(a,b)  (a=a+b,b=a-b,a=a-b)
#define maxn 27
#define N 100000000
#define INF 0x3f3f3f3f
#define mod 1000000009
#define e  2.718281828459045
#define eps 1.0e18
#define PI acos(-1)
#define lowbit(x) (x&(-x))
#define read(x) scanf("%d",&x)
#define put(x) printf("%d\n",x)
#define memset(x,y) memset(x,y,sizeof(x))
#define Debug(x) cout<<x<<" "<<endl
#define lson i << 1,l,m
#define rson i << 1 | 1,m + 1,r
#define ll long long
//std::ios::sync_with_stdio(false);
//cin.tie(NULL);
//const int maxn=;
using namespace std;



int main()
{
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        int k,m;
        cin>>k>>m;
        cout<<k<<" ";
        int s=m;
        int flag=0,sum=0,l=1;
        while(s)
        {
            if(s%10<8)
                sum+=l*(s%10);
            else
            {
                flag=1;
                break;
            }
            s/=10;
            l*=8;
        }
        if(flag==0)
            cout<<sum<<" "<<m<<" ";
        else
            cout<<"0 "<<m<<" ";
        s=m;
        sum=0;
        l=1;
        while(s)
        {
            sum+=l*(s%10);
            s/=10;
            l*=16;
        }
        cout<<sum<<endl;
    }
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值