精华内容
下载资源
问答
  •  从键盘输入一不超过8位十六进制数字串,将它转换为正进制数后输出。  注:十六进制数10~15分别用大写英文字母A、B、C、D、E、F表示。 样例输入 FFFF 样例输出 65535 一、分析 有种方法 第...

    试题 基础练习 十六进制转十进制

    问题描述
      从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
      注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
    样例输入
    FFFF
    样例输出
    65535

    一、分析

    有两种方法
    第一种
    直接使用%x输入然后使用%lld输出这种不推荐比较投机
    第二种
    定义一个字符数组用来存放输入的16进制数,再判断数组的ascll值若是在48-59之间则说明输入的16进制数是0-10只需-48便是对应的十进制数,否则需-55才是对应的十进制数,最后定义一个初始值为0的sum变量累加起来便是结果

    二、ac代码

    1.引入库

    代码如下(示例):

    i#include<stdio.h>
    #include<string.h>
    #include<math.h>
    int main()
    {
    	char a[100];
    	scanf("%s",a);
    	long long int b=strlen(a),i,sum=0;
    	for(i=0;i<b;i++)
    	{
    		if(a[i]>=48&&a[i]<=59)
    		{
    			sum+=(a[i]-48)*pow(16,b-i-1);
    		}
    		else
    		{
    			sum+=(a[i]-55)*pow(16,b-i-1);
    		}
    	} 
    	printf("%lld",sum);
    	return 0;
    }
    

    总结

    16进制转换为10进制如果使用数学方法来算很简单,转换为c语言也是类似数组有多长就表示16进制数有多长,转换为10进制就是从最高位开始每一位的本身的本身-1次方累加便是对应的10进制数

    展开全文
  •  有1,2,3,4,5,6六种硬币,输入它们分别个数,把这些硬币分成半看是否能实现。  首先cnt%2==1,肯定是不能平分。  用hdu coin那道题目一样,都是用多重背包+二进制转化思想。具体参照上篇博客。 ...

    看到这个题我真是感慨万千,无数tlm,经过二进制优化后,居然来了个pe,原因是当cnt%2==1没有输出一个换行符。看来人品是太好了!

    题目:

       有1,2,3,4,5,6六种硬币,输入它们分别得个数,把这些硬币分成两半看是否能实现。

      首先cnt%2==1,肯定是不能平分的。

      用hdu coin那道题目一样,都是用多重背包+二进制转化的思想。具体参照上篇博客。

    Description

    Marsha and Bill own a collection of marbles. They want to split the collection among themselves so that both receive an equal share of the marbles. This would be easy if all the marbles had the same value, because then they could just split the collection in half. But unfortunately, some of the marbles are larger, or more beautiful than others. So, Marsha and Bill start by assigning a value, a natural number between one and six, to each marble. Now they want to divide the marbles so that each of them gets the same total value.
    Unfortunately, they realize that it might be impossible to divide the marbles in this way (even if the total value of all marbles is even). For example, if there are one marble of value 1, one of value 3 and two of value 4, then they cannot be split into sets of equal value. So, they ask you to write a program that checks whether there is a fair partition of the marbles.

    Input

    Each line in the input describes one collection of marbles to be divided. The lines consist of six non-negative integers n1, n2, ..., n6, where ni is the number of marbles of value i. So, the example from above would be described by the input-line ``1 0 1 2 0 0''. The maximum total number of marbles will be 20000.

    The last line of the input file will be ``0 0 0 0 0 0''; do not process this line.

    Output

    For each colletcion, output ``Collection #k:'', where k is the number of the test case, and then either ``Can be divided.'' or ``Can't be divided.''.

    Output a blank line after each test case.

    Sample Input

    1 0 1 2 0 0 1 0 0 0 1 1 0 0 0 0 0 0

    Sample Output

    Collection #1: Can't be divided. Collection #2: Can be divided.

     

     

    代码:

    
    #include<iostream>
    using namespace std;
    int f[1200005];
    int c[10];
    int main()
    {
        int i,j,k,t=1,cnt,sum,mount;
        while(1)
        {
           cnt=0;
           for(i=1;i<=6;i++)
           {
             scanf("%d",&c[i]);
             cnt+=c[i]*i;
           }
           if(cnt==0) {break;}
           printf("Collection #%d:\n",t++);
           if(cnt%2) {printf("Can't be divided.\n");printf("\n");continue;}
           sum=cnt/2;
           memset(f,0,sizeof(f));
           f[0]=1;
           for(i=1;i<=6;i++)
           {
            mount=c[i];
            for(k=1;k<=mount;k<<=1)
            {
              for(j=cnt;j>=k*i;j--)
                 f[j]+=f[j-k*i];
              mount-=k;
            }
            if(mount)
              for(j=cnt;j>=mount*i;j--) f[j]+=f[j-mount*i];
          }
          if(f[sum]) printf("Can be divided.\n");
          else printf("Can't be divided.\n");
          printf("\n");
     }
     return 0;
    }
    


     

    展开全文
  • 蓝桥杯 基础练习 十六进制转十进制

    千次阅读 2018-01-29 22:45:43
     从键盘输入一不超过8位十六进制数字串,将它转换为正进制数后输出。  注:十六进制数10~15分别用大写英文字母A、B、C、D、E、F表示。 样例输入  FFFF 样例输出  65535   解答: 1...

    问题描述

      从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
      注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。

    样例输入

     FFFF

    样例输出

     65535

     

    解答:

    1、问题分析:进制转换问题是编程练习经常涉及到的一类题目。首先,这类题目个人总结有两种做法:

    (1)位权法;

    (2)二进制中转转换法

    相对来说,位权法更直接高效,逻辑性比较强,而通过二进制转换这样一种途径更加简单,但是运算量大,而且代码长度很长,不利于理解,本人增加倾向于使用位权法来解决此类题目。

     

    参考代码:

    #include<iostream> //输入输出流头文件
    #include<string.h> //字符串处理头文件
    using namespace std; //申请命名空间
    int main(){
        char s[8]; //根据题目要求字符数量不能超过8位,因此定义一个长度为8的字符串数组
    
        while(cin >> s){ //输入字符串内容
            int len = strlen(s); //通过strlen获取输入字符串的长度
            long long int m = 0,n = 16; //由于8位16进制数表示的范围超出了int所能够表示的范围,因此定义为long long类型
    
            for(int i = 0;i < len;i++){  //通过分离0~9和A~F来计算转换后的十进制数
                if(s[i] >= '0' && s[i] <= '9'){
                    m = m * n + (s[i] - '0');
                } 
                else{
                    m = m * n + (s[i] - 'A' + 10);
                }
            }
            cout << m;
        }
    
        return 0;
    }

    核心代码:

    通过循环控制和条件选择对字符串每一位进行转换后相加

     

    以题中所给字符串为例:

    最难理解的是else语句里面的语句“m = m * n + (s[i] - 'A' + 10);”

    (s[i] - 'A' + 10)是什么?

    (s[i] - 'A' + 10) 其实就是A、B、C、D、E、F 所对应的十进制数,只不过这里需要通过ACSLL码来转换一下而已。

    前面的 m * n 叠加起来就是权值16 的次方。

    展开全文
  • ,按位或|,按位异或^,两个数相加,若不涉及进位运算,则是两个数进行异或,两个数相加进位其实是两个数想与&之后的二进制再左移<<一位,然后将这两步所得结果再进行相加,直到进位为0为止。实现如下: ...

    在计算机中,计算都是二进制下的运算,主要设计三种操作符,分别为按位与&,按位或|,按位异或^,两个数相加,若不涉及进位运算,则是两个数进行异或,两个数相加的进位其实是两个数想与&之后的二进制再左移<<一位,然后将这两步所得结果再进行相加,直到进位为0为止。实现如下:

    class Solution {
    public:
        int Add(int num1, int num2)
        {
            while(num2!=0){
                int res=num1^num2;
                num2=(num1&num2)<<1;
                num1=res;
            }
            return num1;
        }
    };
    
    展开全文
  • 1:先把数字转位二进制 1 2 4 8 16 对应的分别是1 10 100 1000 10000 然后比如你要算7是分别有哪些组成,7 的二进制是111...那么匹配上面看出只有 前面两个数是1,然后映射到对应数字就是4和8。说明12是由4个8组成 ...
  • 移位操作且不管,今天复习一下按位操作,以随随时翻阅操作对象: bit,整个基础类型中单个bit,即‘二进制位’(即对参与运算参数个二进制分别进行比较操作); 类型:&、|、^、~ (与、或、异或、非...
  • java 位操作

    2012-10-09 14:43:00
    位操作有以下6种 &amp; :按位“与”(AND);... 作用是对运算符两侧以二进制表达操作按位分别进行“与”运算,而这一运算是以中相同位(bit)为单位。操作规则是:仅当两个操...
  • java位操作查漏补缺

    2012-12-21 14:56:00
    位操作有以下6种 &amp; :按位“与”(AND);... 作用是对运算符两侧以二进制表达操作按位分别进行“与”运算,而这一运算是以中相同位(bit)为单位。操作规则是:仅当两个操作...
  • Java中位运算符

    2019-10-08 02:35:44
    在Java中存在着这样一类操作,是针对二进制进行操作。它们各自是&、|、^、~、>...作用是对运算符側以二进制表达操作按位分别进行'与'运算。而这一运算是以中同样位(bit)为单位...
  • Java 位运算符 深入理解

    千次阅读 2015-07-21 21:48:44
    在Java中存在着这样一类操作,是针对二进制进行操作,它们分别是&、|、^、~、>>、>>几位操作,无论是初始值是按照何种进制,都会换算成二进制进行位 操作。接下来对这几种操作进行一下简单讲解。 &: ...
  • 按位计算

    2019-11-05 18:39:38
    当出现在代码中就是两个数之间运算,其实运算法则比较简单,先将需要运算数据 转换为二进制,将两数每一位分别进行逻辑运算。`a=077;b=3;b=a&b;`此时b=3,当a转化 为二进制时a=00111111,b=00000011,...
  • // 一个包含两个元素数组 $a[0] = "first"; $a[1] = "second"; $a[] = "third"; // 添加数组元素简单方法 // 现在$a[2]被赋值为"third" echo count($a); // 打印出3,因为该是...
  • 《你必须知道495C语言问题》

    热门讨论 2010-03-20 16:41:18
    3.15 我要检查一个数是不是在另外两个数之间,为什么if(a b c)不行? 40 3.16 为什么如下代码不对?int a=1000, b=1000; long int c=a * b; 40 3.17 为什么下面代码总是给出0?double degC, degF; degC= ...
  • 在Java中存在着这样一类操作,是针对二进制进行操作。它们各自是&、|、^、~、>...作用是对运算符側以二进制表达操作按位分别进行'与'运算。而这一运算是以中同样位(bit)为单位。操作...
  • 对运算符两侧以二进制表达操作按位分别进行'与'运算。 操作规则是:仅当两个操作都为1时。输出结果才为1。否则为0 例:12 &amp; 5 = 1100 &amp; 0101 = 0100 = 4 (2) 或| 对运算符两側以二进制...
  • Java位运算符

    2019-12-16 11:35:33
    作用是对运算符以二进制位表达操作按位分别进行“与”运算。这一运算是以中同样位(bit)为单位。当且仅当两个操作都是1时,输出结果才为1,否则为0。 2 的二进制为 0010 5 的二进制为 0101 则 2 &...
  • C语言入门参考(

    2017-08-17 21:09:40
    想一下,用机器语言来开发,我们得记住多少用0和1两个数字所组成指令代码以及其代码涵义?显然,这是不合理,这样编程枯燥且繁琐费力,也容易出错。汇编语言应运而生,汇编语言用助记代替机器指令,但助记...
  • Java位运算符深入理解

    2018-04-04 08:41:10
    在Java中存在着这样一类操作,是针对二进制进行操作。它们各自是&amp;、|、^、~、&...作用是对运算符側以二进制表达操作按位分别进行’与’运算。而这一运算是以中同样位(bit)为单位...
  • 3.15 我要检查一个数是不是在另外两个数之间,为什么if(a )不行? 69 3.16 为什么如下代码不对?int a=1000, b=1000; long int c=a * b; 69 3.17 为什么下面代码总是给出0?double degC, degF; degC= 5.0 / 9...
  • 3.15 我要检查一个数是不是在另外两个数之间,为什么if(a b c)不行? 3.16 为什么如下代码不对?int a=1000, b=1000; long int c=a * b; 3.17 为什么下面代码总是给出0?double degC, degF; degC= 5.0 / 9 * ...
  • 3.15 我要检查一个数是不是在另外两个数之间,为什么if(a b c)不行? 3.16 为什么如下代码不对?int a=1000, b=1000; long int c=a * b; 3.17 为什么下面代码总是给出0?double degC, degF; degC= 5.0 / 9 * ...
  • JVM-Class文件结构

    2020-08-26 15:35:39
    Class文件是一株以8字节为单位的二进制流。各个数据项目严格按照顺序紧凑排列在文件之中,中间没有任何分隔,当遇到占用空间大于8字节时,会按照高位在前方式进行分割,分割单位还是8字节。 Class...
  • Class文件是一组以8字节为基础单位的二进制流,各个数据严格按照顺序紧凑地排列在文件之中,中间没有添加任何分隔。文件格式采用一宗类似于C语言结构体伪结构来存储数据,这种伪结构只要种数据类型:无符号...

空空如也

空空如也

1 2 3 4 5 6
收藏数 120
精华内容 48
关键字:

二进制的两个数符分别是