zoukankan      html  css  js  c++  java
  • 17倍

    Description

    在了解做软件开发可能赚很多的钱之后,农夫约翰也开了一家小的软件公司为客户写程序。约翰的第一个任务对他来说看起来相当简单:输入一个数N,然后输出17*N的值。但是现在,客户又变更了一个条件,输入的N是一个二进制数,输出的值也要是二进制表示的。
    现在请帮助约翰完成这个任务。

    Input

    一个二进制表示的数N。

    Output

    二进制表示的17N。

    Sample Input

    10110111

    Sample Output

    110000100111

    Hint

    说明:10110111相当于十进制的183,于是183*17=3111,二进制形式是110000100111 。

    分析
    我用的是一个非常chun的方法—高精乘高精。
    用二进制相乘,逢二进一。

    程序:

    const
    maxn=2000;
    var
    a,b:array[-10..maxn]of longint;
    c:array[-10..2*maxn]of longint;
    l1,l2:longint;
    procedure init;
    var
    s1,s2:ansistring;
    i:longint;
    begin
        readln(s1);
        s2:='10001';
        l1:=length(s1);
        l2:=length(s2);
        for i:=1 to l1 do
        a[l1-i+1]:=ord(s1[i])-ord('0');
        for i:=1 to l2 do
        b[l2-i+1]:=ord(s2[i])-ord('0');
    end;
    procedure main;
    var
    i,j:longint;
    begin
        for i:=1 to maxn do
        begin
         for j:=1 to maxn do
         begin
             c[i+j-1]:=a[i]*b[j]+c[i+j-1];
             c[i+j]:=c[i+j]+c[i+j-1] div 2;
             c[i+j-1]:=c[i+j-1] mod 2;
         end;
        end;
    
    end;
    procedure print;
    var
    i,j:longint;
    begin
        i:=2*maxn;
        while (c[i]=0)and(i>1) do dec(i);
        for j:=i downto 1 do
        write(c[j]);
    end;
    begin
        init;
        main;
        print;
        close(input);
        close(output);
    end.
    
    
    
    
    
  • 相关阅读:
    java list随机截取(洗牌)
    LINUX安装Docker及Portainer可视化界面
    总结一些选题
    深入理解BIO、NIO、AIO
    InnoDB和MyISAM存储引擎的区别
    MyBatis的解析和运行原理
    [杂项/无聊向]《美食大战老鼠》强卡最优策略搜索代码(非玩家勿入)
    CSP 2019 游记
    NOI 2019 游记
    Comet OJ
  • 原文地址:https://www.cnblogs.com/YYC-0304/p/9500068.html
Copyright © 2011-2022 走看看