1010. Radix (25) PAT 甲级

本文介绍了一种基于基数转换的方法,用于确定一个数在不同进制下的表示,并通过二分搜索算法找到使得两个数相等的最小进制。讨论了算法实现细节及关键步骤。

传送门

#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<string>
#include<math.h>

using namespace std;

typedef long long ll;

#define MAX_N 15

ll map[256];
ll INF=(1LL<<63)-1;

char N1[MAX_N],N2[MAX_N];
char temp[MAX_N];
int radix;
int tag;

ll toDecimal(char num[],int radix,ll top){
    ll ans=0;
    int l=strlen(num);
    for(int i=0;i<l;i++){
        ans=ans*radix+map[num[i]];
        //printf("ans=%d\n",ans);
        //printf("top=%lld\n",top);
        if(ans<0||ans>top)  return -1;
    }
    return ans;
}

void initmap(){
    for(char c='0';c<='9';c++){
        map[c]=c-'0';
    }
    for(char c='a';c<='z';c++){
        map[c]=c-'a'+10;
    }
}

ll findLargestDigit(char num[]){
    int ans=-1;
    int l=strlen(num);
    for(int i=0;i<l;i++){
        if(map[num[i]]>ans){
            ans=map[num[i]];
        }
    }
    return ans+1;
}

int cmp(char N2[],ll radix,ll top){
//  printf("%s %d\n",N2,radix);
    ll ans=toDecimal(N2,radix,top);
    //printf("cmp ans=%d\n",ans);
//  printf("%d\n",top);
    if(ans<0)
        return -1;
    if(top>ans)
        return 1;
    if(top==ans)
        return 0;
    return -1;
}

ll binarysearch(char N2[],ll low,ll high,ll top){
    ll mid=0;
    while(low<=high){
        mid=(low+high)/2;
        //printf("mid==%d\n",mid);
        int flag=cmp(N2,mid,top);
        if(flag==0)     return mid;
        if(flag==-1)    high=mid-1;
        if(flag==1)     low=mid+1;
    }
    return -1;
}


int main(){
    initmap();
    scanf("%s %s %d%d",N1,N2,&tag,&radix);
    if(tag==2){
        strcpy(temp,N1);
        strcpy(N1,N2);
        strcpy(N2,temp);
    }
    ll top=toDecimal(N1,radix,INF);
    ll low=findLargestDigit(N2);
    ll high=max(low,top)+1;
    //printf("%d",high);
    ll ans=binarysearch(N2,low,high,top);
    if(ans==-1) printf("Impossible\n");
    else    printf("%lld\n",ans);
}
先展示下效果 https://pan.quark.cn/s/5061241daffd 在使用Apache HttpClient库发起HTTP请求的过程中,有可能遇到`HttpClient`返回`response`为`null`的现象,这通常暗示着请求未能成功执行或部分资源未能得到妥善处理。 在本文中,我们将详细研究该问题的成因以及应对策略。 我们需要掌握`HttpClient`的运作机制。 `HttpClient`是一个功能强大的Java库,用于发送HTTP请求并接收响应。 它提供了丰富的API,能够处理多种HTTP方法(例如GET、POST等),支持重试机制、连接池管理以及自定义请求头等特性。 然而,一旦`response`对象为`null`,可能涉及以下几种情形:1. **连接故障**:网络连接未成功建立或在请求期间中断。 需要检查网络配置,确保服务器地址准确且可访问。 2. **超时配置**:若请求超时,`HttpClient`可能不会返回`response`。 应检查连接和读取超时设置,并根据实际需求进行适当调整。 3. **服务器故障**:服务器可能返回了错误状态码(如500内部服务器错误),`HttpClient`无法解析该响应。 建议查看服务器日志以获取更多详细信息。 4. **资源管理**:在某些情况下,如果请求的响应实体未被正确关闭,可能导致连接被提前释放,进而使后续的`response`对象为`null`。 在使用`HttpClient 3.x`版本时,必须手动调用`HttpMethod.releaseConnection()`来释放连接。 而在`HttpClient 4.x`及以上版本中,推荐采用`EntityUtils.consumeQuietly(respons...
### 关于 `sc_radix` 的解释 在编程环境中,`sc_radix` 并不是一个标准的内置函数或关键字。然而,在某些特定领域或者库中可能存在类似的定义或实现方式。以下是可能涉及的内容: #### 可能的应用场景之一:数值转换中的基数 在许多程序设计语言中,`radix` 常用于表示数制(即进制)。例如,在 JavaScript 中可以使用 `parseInt(string, radix)` 函数来解析字符串并将其转换为指定进制的整数[^4]。 ```javascript const decimalValue = parseInt("1A", 16); // 将十六进制字符串 "1A" 转换为十进制值 26 console.log(decimalValue); ``` 如果提到 `sc_radix`,可能是某种上下文中自定义的一个变量名、函数名称或者是某个宏定义的一部分。这种情况下,它通常用来控制数值转换时所使用的进制。 #### 宏定义中的应用可能性 从引用内容来看,存在关于宏定义的部分描述[^2]。假设在一个 C 或者其他支持预处理的语言环境下,“sc_radix” 可能被用作如下形式: ```c #define SC_RADIX(x) ((x) >= '0' && (x) <= '9') ? 10 : \ ((x) >= 'A' && (x) <= 'F') || ((x) >= 'a' && (x) <= 'f') ? 16 : 8 ``` 上述例子展示了一个简单的条件判断逻辑,其中根据输入字符决定采用哪种进制作为默认值。如果是数字,则返回十进制;若是字母 A-F/a-f 则返回十六进制;其余情况则假定八进制。 #### XML 文档创建过程关联分析 另外一段引用提到了通过 DOM API 创建节点的操作[^1]。虽然这里并没有直接提及到 “sc_radix”,但如果是在构建配置文件或是数据交换格式的时候需要用到不同进位系统的表达方法的话,那么也许会间接涉及到该概念。 比如当我们要动态生成包含多种编码信息的数据结构时,可能会这样写: ```java DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.newDocument(); // Create root element and set attribute using specific base(radix) Element personElm = doc.createElement("person"); Attr attrRadix = doc.createAttribute("radix"); attrRadix.setValue(Integer.toString(16)); // Set hexadecimal as example here. personElm.setAttributeNode(attrRadix); doc.appendChild(personElm); System.out.println(convertDOMToString(doc)); ``` 此代码片段展示了如何向新建立的人工智能对象添加属性,并设置其值代表某一种特殊的计数体系——在这里我们选择了十六进制为例说明问题。 ### 总结 由于缺乏更具体的背景资料,目前只能推测 `sc_radix` 应该是用来指示或者操作有关数系变换方面的参数设定项。具体含义还需依据实际项目文档进一步确认。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值