进制转换;n^k计算;16进制转10进制(按权展开);字符串转数值(保存始末下标-倒序计算)

进制转换

http://www.nowcoder.com/questionTerminal/8f3df50d2b9043208c5eed283d1d4da6

#include <stdio.h>

// 0x2A = 2* 16^1 + 10 * 16^0 = 32+10 = 42

int power(int n,int k) // n^k
{
    int i;
    int val=n;
    if(k==0){
        return 1;
    }
    if(k==1){
        return n;
    }
    for(i=2;i<=k;i++){ // i=2;n*n;i=3,n*n*n,i=4,n*n*n*n
        val = n * val;
    }
    return val;
}

int main()
{
    char s[1000]="";

//    printf("%d\n",0x2A); // 42
    while(scanf("%s",s)!=EOF){
        int i,start,end,k,j;
        int d=0;
        for(i=0; s[i]!='\0'; i++){
            if(s[i]=='0' && (s[i+1]=='x' || s[i+1]=='X')){
                start=i+2;
                for(i=i+2; s[i]!='\0' && !(s[i]=='0' && (s[i+1]=='x' || s[i+1]=='X')); i++){ // 注意条件,\0判断和非操作(因为i变化了,并且使用s[i]值进行判断)
                }
                end=i-1;
                for(k=end,j=0;k>=start;k--,j++){  // 低位开始
                    if((s[k]>='A' || s[k]>='a') && (s[k]>='F' || s[k]<='f')){
                        d = d + (s[k]-'A'+10)*power(16,j);
                    }else{
                        d = d + (s[k]-'0')*power(16,j); // 注意输入的是字符串,这里也要处理
                    }
                 //   printf("power(16,j)=%d; d=%d\n",power(16,j),d);
                }
                printf("%d\n",d);
                // 接下来从上个数结束的地方继续遍历
            }
        }
    }

    return 0;
}
全部评论

相关推荐

不敢对抗,但我现在拿了offer就要我去实习,这也太久了吧,大四这一年都没得玩了
哞客37422655...:建议企业了解学校课程,直接从小学开始抓计算机三大件,初中培训acm,高中分语言走对应开发路线。高中毕业直接开始夏招。提升互联网高速发展400%
点赞 评论 收藏
分享
点赞 评论 收藏
分享
08-08 16:33
唐山学院 Java
职场水母:首先,简历太长,对于实习和应届找工作,hr一眼扫的是学历,技术看实习,你写的技术栈字太多了,尽量用一句话概括不用写那么详细,技术面的时候会问的,而且技术栈都会在实习或者项目里体现,你要做的是,把你的简历浓缩为一页,删除没用的东西,比如实践经历,自我评价,这些纯废话,没用,专业技能写的太离谱,你真的熟练掌握了吗,建议都写熟悉,找工作和写论文不一样,追求的是干练和实用,把实习经历和项目提前,把掌握的技术栈写到最后,然后去找实习,
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务