• 进制的转换


    来自 TOJ-BobHuang
    int可以表达范围[-2^31 , 2^31 -1] 即 [-2147483648,2147483647]的数,给我一个数组和数我怎么在两者之间进行转换呢?我们需要做的就是获取某一位。比如TOJ1472,我们需要的就是逆置这个数,我们第一想法就是去获取这个每一位,因为这个数位较少,除法和取余就可以了,但是如果到TOJ2779就会发现这种方法实在太麻烦了,我们就可以想一下新奇的做法,那就是循环用数组去存储。

    循环可以这样写

    #include<stdio.h>
    int s[105];
    int main()
    {
        int n;
        while(~scanf("%d",&n))
        {
            int l=0;
            while(n)
            {
                s[l++]=n%10;//将得到的这一位存储起来
                n/=10;//舍去这一位
            }
            for(int i=l-1;i>0;i--)printf("%d",s[i]);
            printf("%d
    ",s[0]);//输出这个串并换行
        }
        return 0;
    }

    这样解决问题是不是简单多了,但是你会发现0并不能解决。可以用do while或者0特判去避免这个问题,因为0总是要输出的,事情证明,这个问题也往往会被忽略。

    如果这个题目弱化了,就是这个位数只有30位了,也就是在我可以表示的范围内,那我就可以把上面的操作倒回来

    #include <stdio.h>
    char
    s[1005],t[255]; int main() { scanf("%s",s); int sum=0,i; for(i=0;s[i];i++)sum=sum*2+s[i]-'0'; printf("%X",sum); return 0; }

    这里printf里面提供了可以输出16进制的格式%X,就能让我把代码写的很简洁

    这个题目的位数比较多,但是我可以四位一处理,但是可以前面四位是不足的,要进行补0操作,但是对字符串补0其实也是可以倒着做回去的,代码思路如下所示

    #include <stdio.h>
    #include <string.h>
    char s[1005],t[255];
    int main()
    {
        int T;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%s",s);
            int l=strlen(s),tot=0,i;//tot是t有几位
            for(i=l-1;i>=0;i-=4)
            {
                int j=i,sum=0,tmp=1;
                while(j>=0&&j>i-4)sum=sum+(s[j]-'0')*tmp,tmp*=2,j--;//这个因为我是倒着处理的,所以就是把当前位乘上它的权就好,由于容易越界,所以还是倒着写了
                if(sum>9)t[tot++]=sum-10+'A';//大于9就是和'A'进行强制转换
                else t[tot++]=sum+'0';//小于就是9
            }
            for(i=tot-1;i>0;i--)printf("%c",t[i]);//倒置
            printf("%c
    ",t[0]);
        }
        return 0;
    }
  • 相关阅读:
    检测数组和对象&扩展String.prototype.format 字符串拼接的功能
    10000以内unicode对照表
    手机页面加载完成后再显示(粗糙版)
    手机端网页 横竖屏翻转事件
    代替eval的方法
    跨域和非跨域 获取iframe页面高度的方法
    HDU2032 杨辉三角
    HDU2030 汉字统计
    POJ 2029 Palindromes _easy version
    POJ3468 A Simple Problem with Integers
  • 原文地址:https://www.cnblogs.com/Kingpenguin/p/9948656.html
Copyright © 2020-2023  润新知