精华内容
下载资源
问答
  • 1012又见二进制

    2020-06-09 20:22:46
    给定一个正整数,写出它的 2进制表示中有多少个 1 输入描述 多组输入,输入的第一行为一个正整数 n,表示接下来有 n 组数据,每一行为 1 个正整数a(0<a≤10000) 输出描述 对于每一组数据,求出 a 的 2 进制表示法...

    题目描述
    给定一个正整数,写出它的 2进制表示中有多少个 1

    输入描述
    多组输入,输入的第一行为一个正整数 n,表示接下来有 n 组数据,每一行为 1 个正整数a(0<a≤10000)

    输出描述
    对于每一组数据,求出 a 的 2 进制表示法中 1 的个数

    样例输入
    Copy to Clipboard
    2
    5
    10
    样例输出
    Copy to Clipboard
    2
    2

    #include<iostream>
    using namespace std;
    int main(){
    	int n;
    	for(cin>>n;n>0;n--){
    		int x,ans=0;
    		cin>>x;
    		while(x>0){
    			ans+=x%2;
    			x/=2;
    		}
    		cout<<ans<<endl;
    	}
    	return 0;
    }
    
    展开全文
  • #include #include #include using namespace std; bool did = false; void dfs(int n,int x) { if (n ) return; else if (n == 0 && !did) { cout ; return;... else if (n == 0 && did
    
    
    #include <iostream>
    #include <cstdio>
    #include <cmath>
    using namespace std;
    bool did = false;
    void dfs(int n,int x) {
    	if (n < 0)
    		return;
    	else if (n == 0 && !did) {
    		cout << 0 << endl;
    		return;
    	}
    	else if (n == 0 && did) {
    		cout << 0 << ")";
    		return;
    	}
    	else if (n == 1 && did)
    		return;
    	int sum = 0;
    	int m;
    	int k = n;
    	int i;
    	for ( i = 0; ; i++) {
    		m = pow(2, i);
    		if (m > k)
    		{
    			cout << 2;
    			did = true;
    			sum += pow(2, i - 1);
    			k = n - sum;
    			if (i != 2)
    				cout << "(";
    			dfs(i - 1,x);
    			if (k != 0)
    				cout << "+";
    			i = 0;
    			if (k == 0)
    				break;
    		}
    	}
    	if(x != sum)
    	cout << ")";
    }
    int main() {
    	int n;
    	cin >> n;
    	dfs(n,n);
    	return 0;
    }

    展开全文
  • Description 任何一个正整数都可以用2的幂次方表示。... 由此可知,137可表示为:2(7)+2(3)+2(0) 进一步:7 = 2^2 + 2 + 2^0 (2^1用2表示) 3 = 2 + 2^0 所以最后137可表示为:2(2(2)+2+2(0))+2(2+2(0))+2(0)

    Description
    任何一个正整数都可以用2的幂次方表示。例如:137 = 2^7 + 2^3 + 2^0 同时约定方次用括号来表示,即a^b 可表示为a(b)。 由此可知,137可表示为:2(7)+2(3)+2(0) 进一步:7 = 2^2 + 2 + 2^0 (2^1用2表示) 3 = 2 + 2^0 所以最后137可表示为:2(2(2)+2+2(0))+2(2+2(0))+2(0) 又如:1315 = 2^10 + 2^8 + 2^5 + 2 + 1 所以1315最后可表示为:2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)

    Input
    输入一个整数n,其中0<=n<=20000

    Output
    符合约定的n的0,2表示(在表示中不能有空格)

    Sample Input
    1315

    Sample Output
    2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)

    //#define Night_13
    #include <iostream>
    using namespace std;
    const int LEN = 32;
    
    void dfs(int n) {
        bool first = false;
        for (int i = 1; i <= LEN; ++i) {
            if (n < 0) {
                if (first) printf("+");
                first = true;
    
                if (LEN - i == 1) {
                    printf("2");
                } else {
                    printf("2(");
                    if (LEN - i == 0) printf("0");
                    else dfs(LEN - i);
                    printf(")");
                }
            }
            n <<= 1;
        }
    }
    
    int main() {
    
    #ifdef Night_13
        freopen("input.txt", "r", stdin);
    #endif
        int n;
        while (scanf("%d", &n) != EOF) {
            if (n == 0) printf("0\n");
            else dfs(n);
            printf("\n");
        }
        return 0;
    }
    展开全文
  • 文件和二进制数据的操作 来自《JavaScript 标准参考教程(alpha)》,by 阮一峰目录Blob对象FileList对象File对象FileReader对象综合实例:显示用户选取的本地图片URL对象参考链接历史上,JavaScript无法处理二进制...


    文件和二进制数据的操作 

    来自《JavaScript 标准参考教程(alpha)》,by 阮一峰

    目录

    历史上,JavaScript无法处理二进制数据。如果一定要处理的话,只能使用charCodeAt()方法,一个个字节地从文字编码转成二进制数据,还有一种办法是将二进制数据转成Base64编码,再进行处理。这两种方法不仅速度慢,而且容易出错。ECMAScript 5引入了Blob对象,允许直接操作二进制数据。

    Blob对象是一个代表二进制数据的基本对象,在它的基础上,又衍生出一系列相关的API,用来操作文件。

    • File对象:负责处理那些以文件形式存在的二进制数据,也就是操作本地文件;
    • FileList对象:File对象的网页表单接口;
    • FileReader对象:负责将二进制数据读入内存内容;
    • URL对象:用于对二进制数据生成URL。

    Blob对象

    Blob(Binary Large Object)对象代表了一段二进制数据,提供了一系列操作接口。其他操作二进制数据的API(比如File对象),都是建立在Blob对象基础上的,继承了它的属性和方法。

    生成Blob对象有两种方法:一种是使用Blob构造函数,另一种是对现有的Blob对象使用slice方法切出一部分。

    (1)Blob构造函数,接受两个参数。第一个参数是一个包含实际数据的数组,第二个参数是数据的类型,这两个参数都不是必需的。

    var htmlParts = ["<a id=\"a\"><b id=\"b\">hey!<\/b><\/a>"];
    
    var myBlob = new Blob(htmlParts, { "type" : "text\/xml" });

    下面是一个利用Blob对象,生成可下载文件的例子。

    var blob = new Blob(["Hello World"]);
    
    var a = document.createElement("a");
    a.href = window.URL.createObjectURL(blob);
    a.download = "hello-world.txt";
    a.textContent = "Download Hello World!";
    
    body.appendChild(a);

    上面的代码生成了一个超级链接,点击后提示下载文本文件hello-world.txt,文件内容为“Hello World”。

    (2)Blob对象的slice方法,将二进制数据按照字节分块,返回一个新的Blob对象。

    var newBlob = oldBlob.slice(startingByte, endindByte);

    下面是一个使用XMLHttpRequest对象,将大文件分割上传的例子。

    function upload(blobOrFile) {
      var xhr = new XMLHttpRequest();
      xhr.open('POST', '/server', true);
      xhr.onload = function(e) { ... };
      xhr.send(blobOrFile);
    }
    
    document.querySelector('input[type="file"]').addEventListener('change', function(e) {
      var blob = this.files[0];
    
      const BYTES_PER_CHUNK = 1024 * 1024; // 1MB chunk sizes.
      const SIZE = blob.size;
    
      var start = 0;
      var end = BYTES_PER_CHUNK;
    
      while(start < SIZE) {
        upload(blob.slice(start, end));
    
        start = end;
        end = start + BYTES_PER_CHUNK;
      }
    }, false);
    
    })();

    (3)Blob对象有两个只读属性:

    • size:二进制数据的大小,单位为字节。
    • type:二进制数据的MIME类型,全部为小写,如果类型未知,则该值为空字符串。

    在Ajax操作中,如果xhr.responseType设为blob,接收的就是二进制数据。

    FileList对象

    FileList对象针对表单的file控件。当用户通过file控件选取文件后,这个控件的files属性值就是FileList对象。它在结构上类似于数组,包含用户选取的多个文件。

    <input type="file" id="input" onchange="console.log(this.files.length)" multiple />

    当用户选取文件后,就可以读取该文件。

    var selected_file = document.getElementById('input').files[0];

    采用拖放方式,也可以得到FileList对象。

    var dropZone = document.getElementById('drop_zone');
    dropZone.addEventListener('drop', handleFileSelect, false);
    
    function handleFileSelect(evt) {
        evt.stopPropagation();
        evt.preventDefault();
    
        var files = evt.dataTransfer.files; // FileList object.
    
        // ...
    }

    上面代码的 handleFileSelect 是拖放事件的回调函数,它的参数evt是一个事件对象,该参数的dataTransfer.files属性就是一个FileList对象,里面包含了拖放的文件。

    File对象

    File对象是FileList对象的成员,包含了文件的一些元信息,比如文件名、上次改动时间、文件大小和文件类型。它的属性值如下:

    • name:文件名,该属性只读。
    • size:文件大小,单位为字节,该属性只读。
    • type:文件的MIME类型,如果分辨不出类型,则为空字符串,该属性只读。
    • lastModifiedDate:文件的上次修改时间。
    var selected_file = document.getElementById('input').files[0];
    
    var fileName = selected_file.name;
    var fileSize = selected_file.size;
    var fileType = selected_file.type;

    FileReader对象

    FileReader对象用于读取文件,即把文件内容读入内存。它的参数是File对象或Blob对象。

    对于不同类型的文件,FileReader使用不同的方法读取。

    • readAsBinaryString(Blob|File):返回二进制字符串,该字符串每个字节包含一个0到255之间的整数。

    • readAsText(Blob|File, opt_encoding) :返回文本字符串。默认情况下,文本编码格式是'UTF-8',可以通过可选的格式参数,指定其他编码格式的文本。

    • readAsDataURL(Blob|File):返回一个基于Base64编码的data-uri对象。

    • readAsArrayBuffer(Blob|File) :返回一个ArrayBuffer对象。

    readAsText方法用于读取文本文件,它的第一个参数是File或Blob对象,第二个参数是前一个参数的编码方法,如果省略就默认为UTF-8编码。该方法是异步方法,一般监听onload事件,用来确定文件是否加载结束,方法是判断FileReader实例的result属性是否有值。其他三种读取方法,用法与readAsText方法类似。

    var reader = new FileReader();
    
    reader.onload = function(e) {
      var text = reader.result;
    }
    
    reader.readAsText(file, encoding);
    

    readAsDataURL方法返回一个data URL,它的作用基本上是将文件数据进行Base64编码。你可以将返回值设为图像的src属性。

    var reader = new FileReader();
    
    reader.onload = function(e) {
      var dataURL = reader.result;
    }
    
    reader.readAsDataURL(file);
    

    readAsBinaryString方法可以读取任意类型的文件,而不仅仅是文本文件,返回文件的原始的二进制内容。这个方法与XMLHttpRequest.sendAsBinary方法结合使用,就可以使用JavaScript上传任意文件到服务器。

    var reader = new FileReader();
    
    reader.onload = function(e) {
      var rawData = reader.result;
    }
    
    reader.readAsBinaryString(file);
    

    readAsArrayBuffer方法读取文件,返回一个类型化数组(ArrayBuffer),即固定长度的二进制缓存数据。在文件操作时(比如将JPEG图像转为PNG图像),这个方法非常方便。

    var reader = new FileReader();
    
    reader.onload = function(e) {
      var arrayBuffer = reader.result;
    }
    
    reader.readAsArrayBuffer(file);
    

    除了以上四种不同的读取文件方法,FileReader对象还有一个abort方法,用于中止文件上传。

    var reader = new FileReader();
    
    reader.abort();

    FileReader对象采用异步方式读取文件,可以为一系列事件指定回调函数。

    • onabort方法:读取中断或调用reader.abort()方法时触发。
    • onerror方法:读取出错时触发。
    • onload方法:读取成功后触发。
    • onloadend方法:读取完成后触发,不管是否成功。触发顺序排在 onload 或 onerror 后面。
    • onloadstart方法:读取将要开始时触发。
    • onprogress方法:读取过程中周期性触发。

    下面的代码是如何展示文本文件的内容。

    var reader = new FileReader();
    
    reader.onload = function(e){
      console.log(e.target.result);
    }
    
    reader.readAsText(blob);

    onload事件的回调函数接受一个事件对象,该对象的target.result就是文件的内容。

    下面是一个使用readAsDataURL方法,为img元素添加src属性的例子。

    var reader = new FileReader();
    
    reader.onload = function(e) {
        document.createElement('img').src = e.target.result;
    
    };
    
    reader.readAsDataURL(f);

    下面是一个onerror事件回调函数的例子。

    var reader = new FileReader();
    reader.onerror = errorHandler;
    
    function errorHandler(evt) {
      switch(evt.target.error.code) {
        case evt.target.error.NOT_FOUND_ERR:
          alert('File Not Found!');
          break;
        case evt.target.error.NOT_READABLE_ERR:
          alert('File is not readable');
          break;
        case evt.target.error.ABORT_ERR:
          break;
        default:
          alert('An error occurred reading this file.');
      };
    }

    下面是一个onprogress事件回调函数的例子,主要用来显示读取进度。

    var reader = new FileReader();
    reader.onprogress = updateProgress;
    
    function updateProgress(evt) {
      if (evt.lengthComputable) {
        var percentLoaded = Math.round((evt.loaded / evt.totalEric Bidelman) * 100);
          
        var progress = document.querySelector('.percent');
        if (percentLoaded < 100) {
          progress.style.width = percentLoaded + '%';
          progress.textContent = percentLoaded + '%';
        }
      }
    }

    读取大文件的时候,可以利用Blob对象的slice方法,将大文件分成小段,逐一读取,这样可以加快处理速度。

    综合实例:显示用户选取的本地图片

    假设有一个表单,用于用户选取图片。

    <input type="file" name="picture" accept="image/png, image/jpeg"/>

    一旦用户选中图片,将其显示在canvas的函数可以这样写:

    document.querySelector('input[name=picture]').onchange = function(e){
         readFile(e.target.files[0]);
    }
    
    function readFile(file){
    
      var reader = new FileReader();
    
      reader.onload = function(e){
        applyDataUrlToCanvas( reader.result );
      };
    
      reader.reaAsDataURL(file);
    }

    还可以在canvas上面定义拖放事件,允许用户直接拖放图片到上面。

    // stop FireFox from replacing the whole page with the file.
    canvas.ondragover = function () { return false; };
    
    // Add drop handler
    canvas.ondrop = function (e) {
      e.stopPropagation();
      e.preventDefault(); 
      e = e || window.event;
      var files = e.dataTransfer.files;
      if(files){
        readFile(files[0]);
      }
    };

    所有的拖放事件都有一个dataTransfer属性,它包含拖放过程涉及的二进制数据。

    还可以让canvas显示剪贴板中的图片。

    document.onpaste = function(e){
      e.preventDefault();
      if(e.clipboardData&&e.clipboardData.items){
        // pasted image
        for(var i=0, items = e.clipboardData.items;i<items.length;i++){
          if( items[i].kind==='file' && items[i].type.match(/^image/) ){
            readFile(items[i].getAsFile());
            break;
          }
        }
      }
      return false;
    };

    URL对象

    URL对象用于生成指向File对象或Blob对象的URL。

    var objecturl =  window.URL.createObjectURL(blob);

    上面的代码会对二进制数据生成一个URL,类似于“blob:http%3A//test.com/666e6730-f45c-47c1-8012-ccc706f17191”。这个URL可以放置于任何通常可以放置URL的地方,比如img标签的src属性。需要注意的是,即使是同样的二进制数据,每调用一次URL.createObjectURL方法,就会得到一个不一样的URL。

    这个URL的存在时间,等同于网页的存在时间,一旦网页刷新或卸载,这个URL就失效。除此之外,也可以手动调用URL.revokeObjectURL方法,使URL失效。

    window.URL.revokeObjectURL(objectURL);

    下面是一个利用URL对象,在网页插入图片的例子。

    var img = document.createElement("img");
    
    img.src = window.URL.createObjectURL(files[0]);
    
    img.height = 60;
    
    img.onload = function(e) {
        window.URL.revokeObjectURL(this.src);
    }
    
    body.appendChild(img);
    
    var info = document.createElement("span");
    
    info.innerHTML = files[i].name + ": " + files[i].size + " bytes";
    
    body.appendChild(info);

    还有一个本机视频预览的例子。

    var video = document.getElementById('video');
    var obj_url = window.URL.createObjectURL(blob);
    video.src = obj_url;
    video.play()
    window.URL.revokeObjectURL(obj_url);

    参考链接





    展开全文
  • 学习二进制有感~

    千次阅读 2014-10-07 20:40:12
    二进制,一个曾经只是听说过没过的东西,现在已经渐渐地走入了我们日常的学习生活。 二进制的学习过程既简单繁琐,简单的0和1却能产生出无数种组合,进行各种各样的转换,这给初次接触的我们带来了不少麻烦。 ...
  • C语言读取二进制文件

    万次阅读 2017-09-26 00:38:01
     其实,解决C语言的二进制解析很简单,就是一个简单fopen函数的使用而已。其余的操作跟常用的脚本语言其实也没有太大的差异。代码如下:  1 #include "stdio.h"  2   3 FILE*fp;  4 
  • 方便查找,来源参考文档 你学的C是什么C,你说的++是什么++ 1 while(sum&gt;0) { if(sum%2 != 0) { c++; // counting number of ones } sum=sum/2; } 2 #include #include #include size_t ...
  • 上周广联达笔试的时候,有一道题是我之前在LeetCode上过的题,但是我在考试过程中只记得大体思路,是调用了一个C++的库函数,可以直接计算1的数量,具体调用哪个库函数记不...如果存在多个数字二进制中 1 的数目相...
  • 计算机中的字由位组成,字是用二进制表示,那么我们该如何进行二进制的加减乘除运算呢?要搞清这个问题,首先得知道计算机中实数和浮点数的表示方法,定点表示和浮点表示等,详情我专栏中另一篇博文。 弄清楚了...
  • 题目链接:这里 题意:首先有n种点心,每种点心的t,u,v代表该点心每个所提供的能量,体积,数量。然后有m中车,每种车的x,y,z代表这种车的容量,费用,数量。有一个p,问你所选的点心达到p的能量值的时候所需要...
  • Android基础入门教程——6.3.2 数据存储与访问之——又见SQLite数据库 本节引言: 学习完上一节,关于Android中的SQLite的基本操作,你就已经掌握了,而在本节我们将会学习 一些稍微高级一点的东西,数据库事务,...
  • nyoj 781 又见回文数

    2016-05-12 18:07:58
    又见回文数 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 冷淡的回文数被水了,各种被水,然后他很生气,然后... 一个数从左边读和从右边读一样,就说这个数是回文数。如121就是一个...
  • 描述 冷淡的回文数被水了,各种被水,然后他很生气,然后... ...如17用十进制表示它不是回文数,但是用二进制表示(10001),它是一个回文数。 输入 输入包含一些整数。每个数n(0&lt;n&lt;50...
  • 又见回文数 NYOJ781

    2013-12-20 09:57:13
    又见回文数 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 冷淡的回文数被水了,各种被水,然后他很生气,然后... 一个数从左边读和从右边读一样,就说这个数是回文数。如121就是一个回文数。 ...
  • NYOJ781 又见回文数

    千次阅读 2014-06-19 10:40:56
    又见回文数 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 冷淡的回文数被水了,各种被水,然后他很生气,然后... 一个数从左边读和从右边读一样,就说这个数是回文数。如121就是一个...
  • NYOJ 781 又见回文数

    2014-02-13 17:41:03
    又见回文数 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 冷淡的回文数被水了,各种被水,然后他很生气,然后... 一个数从左边读和从右边读一样,就说这个数是回文数。如121就是一个回文...
  • SCU - 4515 ...背包九讲 2.0的例题,用多重背包的二进制能过 根据 lyb dalao所述 因为 K,所以其实最后用到的物品数量不会超过 1e5 所以 mi=min(mi,K/ai)m_i = min(m_i, K/a_i),所以用二进制优化能过背
  • 有n种大小不同的数字aia_i,每种mim_i个,...这题是多重背包,但是时间卡的有点紧,所以可能会被卡,二进制和单调队列都有可能T。 一般的状态是dp[i][j]dp[i][j]表示用了前i种数字,能否组合出j,但是用这个状态,只存b
  • 点击蓝色字体,一键关注我们“梦之想网络安全护航者”在过去的两个月里,我一直在研究采用GO语言编写的恶意...GO二进制文件概述这里分析的样本,是一个被剥离了编译和调试信息的ELF可执行文件,这使得逆向工程变得...
  • 在过去的两个月里,我一直在研究采用GO语言编写的恶意...GO二进制文件概述这里分析的样本,是一个被剥离了编译和调试信息的ELF可执行文件,这使得逆向工程变得困难。值得庆幸的是,一款补救工具(REDRESS: https:/...
  • 从技术层面来说就是 通过程序模拟浏览器请求站点的行为,把站点返回的HTML代码/JSON数据/二进制数据(图片、视频) 爬到本地,进而提取自己需要的数据,存放起来使用。 小编创建了一个两千人的python交流群,有零...
  • 位域 (网络的.)

    2006-01-19 16:45:00
    位域有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言提供了一种数据结构...
  • 从技术层面来说就是 通过程序模拟浏览器请求站点的行为,把站点返回的HTML代码/JSON数据/二进制数据(图片、视频) 爬到本地,进而提取自己需要的数据,存放起来使用。 想要学习Python缺少系统化学习方案的朋友...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 149
精华内容 59
热门标签
关键字:

又见二进制