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.
    
    
    
    
    
  • 相关阅读:
    NYOJ The Triangle
    max()和数组里面的max
    sizeof和strlen的区别和联系总结
    继BAT之后 第四大巨头是谁
    专注做好一件事
    编程技术面试的五大要点
    IBM面试记
    创业者,你为什么这么着急?
    硅谷创业教父Paul Graham:如何获得创业idea
    17家中国初创公司的失败史
  • 原文地址:https://www.cnblogs.com/YYC-0304/p/9500068.html
Copyright © 2011-2022 走看看