Description

Educators are always coming up with new ways to teach math to students. In 2011, an educational software company, All Computer Math (ACM), developed an application to display products in a traditional grade school math format. ACM is now working on an
updated version of the software that will display results in a lattice format that some students find to be easier when multiplying larger numbers.

An example would be when multiplying 345 * 56 = 19320 as given below, using a lattice grid with 2 rows and 3 columns, which appears inside a surrounding frame:

+---------------+

|   3   4   5   |

| +---+---+---+ |

| |1 /|2 /|2 /| |

| | / | / | / |5|

|1|/ 5|/ 0|/ 5| |

| +---+---+---+ |

|/|1 /|2 /|3 /| |

| | / | / | / |6|

|9|/ 8|/ 4|/ 0| |

| +---+---+---+ |

|/ 3 / 2 / 0    |

+---------------+
The first operand, 345, is displayed above the top of the grid with each digit centered horizontally above its column of the grid, and the second operand, 56, is displayed along the righthand side with each digit
centered vertically at the center of its row in the grid. A single cell of the grid, such as
+---+

|3 /|

| / |

|/ 0|

+---+
represents the product of the digit of the first operand that is above its column and the digit of the second operand that is to the right of its row. In our example, this cell represents the product 5 times 6 = 30 that results when multiplying the 5 in
345 and the 6 in 56. Note that the 10's digit of that product is placed in the upper left portion of this cell and the 1's digit in the lower right.

The overall product is then computed by summing along the diagonals in the lattice that represent the same place values in the result. For example, in our first problem the product 19320 was computed as:

1's digit = 0
10's digit = 5 + 3 + 4 = 12, thus 2 with a carry of 1
100's digit = (1 carry) + 2 + 0 + 2 + 8 = 13, thus 3 with a carry of 1
1000's digit = (1 carry) + 2 + 5 + 1 = 9
10000's digit = 1
The resulting product is placed with the one's digit below the grid at the far right and, depending on its length, with the most significant digits wrapped around the left side of the grid. Each digit of the final product appears perfectly aligned with
the corresponding diagonal summands.

To provide an aesthetic view, we use a series of minus (-) characters for horizontal lines, pipe (|) characters for vertical lines, and slash (/) characters for diagonal lines. Furthermore, we use a plus (+) character wherever a horizontal and vertical line
meet. Each multiplication lattice is subsequently "boxed" by an outer border. There is a row containing the first operand which is between the topmost border and the top line of the grid, and a row between the bottom of the grid and the bottom border, which
contains some portion of the resulting product. There is one column between the leading | and the left edge of the inner grid, which may contain a portion of the resulting product, and one column after the right edge of the inner grid but before the rightmost
| border, which contains the second operand. If the product is not long enough to wrap around the bottom-left corner, the column between the left border and the left edge of the grid will containing only spaces. (See the later example of 3 x 3.)

Leading zeros should be displayed within lattice grid cells, but leading zeros should never be displayed in the product, nor should there ever be a slash (/) character prior to the leading digit of the product. For example, consider the product of 12 * 27
= 324 below:

+-----------+

|   1   2   |

| +---+---+ |

| |0 /|0 /| |

| | / | / |2|

| |/ 2|/ 4| |

| +---+---+ |

| |0 /|1 /| |

| | / | / |7|

|3|/ 7|/ 4| |

| +---+---+ |

|/ 2 / 4    |

+-----------+
Note that in the top-right grid of the lattice, the product 2 * 2 = 04 is displayed with the zero for the tens digit. However, there is no thousands digit displayed in the product 324, nor is there any slash displayed above the digit 3 in that product.

Input

The input contains one or more tests. Each test contains two positive integers, A and B, such that 1 ≤ A ≤ 9999 and 1 ≤ B ≤ 9999. The last data set will be followed by a line containing 0 0.

Output

For each data set, produce the grid that illustrates how to multiply the two numbers using the lattice multiplication technique.

Sample Input

345 56
12 27
1 68
9999 7
3 3
0 0

Sample Output

+---------------+
| 3 4 5 |
| +---+---+---+ |
| |1 /|2 /|2 /| |
| | / | / | / |5|
|1|/ 5|/ 0|/ 5| |
| +---+---+---+ |
|/|1 /|2 /|3 /| |
| | / | / | / |6|
|9|/ 8|/ 4|/ 0| |
| +---+---+---+ |
|/ 3 / 2 / 0 |
+---------------+
+-----------+
| 1 2 |
| +---+---+ |
| |0 /|0 /| |
| | / | / |2|
| |/ 2|/ 4| |
| +---+---+ |
| |0 /|1 /| |
| | / | / |7|
|3|/ 7|/ 4| |
| +---+---+ |
|/ 2 / 4 |
+-----------+
+-------+
| 1 |
| +---+ |
| |0 /| |
| | / |6|
| |/ 6| |
| +---+ |
| |0 /| |
| | / |8|
|6|/ 8| |
| +---+ |
|/ 8 |
+-------+
+-------------------+
| 9 9 9 9 |
| +---+---+---+---+ |
| |6 /|6 /|6 /|6 /| |
| | / | / | / | / |7|
|6|/ 3|/ 3|/ 3|/ 3| |
| +---+---+---+---+ |
|/ 9 / 9 / 9 / 3 |
+-------------------+
+-------+
| 3 |
| +---+ |
| |0 /| |
| | / |3|
| |/ 9| |
| +---+ |
| 9 |
+-------+

题意即为模拟乘法。是模拟题,其中旁边的数字是直接用m*n然后依次取各个位上的数。

#include<stdio.h>
#include<string.h>
int a[10],b[10],c[10],d[10],e[10],f;
int main()
{
    int n,m,i,j,k,p,flag,sum,t,s,num,num1;
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        if(n==0 && m==0)
        break;
        num=n*m;
        t=0;
        while(num>0)
        {
            t++;
            e[t]=num%10;
            num=num/10;
            num1=t;
        }
         
         
        t=0;
        while(n>0)
        {
            t++;
            a[t]=n%10;
            n=n/10;
            p=t;
        }
        for(i=1;i<=p;i++)
        {
            c[i]=a[p+1-i];
        }
        t=0;
        while(m>0)
        {
            t++;
            b[t]=m%10;
            m=m/10;
            k=t;
        }
        for(i=1;i<=k;i++)
        {
            d[i]=b[k+1-i];
        }
        printf("+");
        for(i=1;i<=p*3+p+1+2;i++)
        printf("-");
        printf("+\n");
        for(i=1;i<=4*p+5;i++)
        {
            if(i==1 || i==4*p+5)
            printf("|");
            else if((i-1)%4==0)
            {
              printf("%d",c[(i-1)/4]);           
            }
            else printf(" ");
        }
        printf("\n");
        flag=0;
        for(i=1;i<=k;i++)
        {
            printf("| ");
            for(j=1;j<=p;j++)
            printf("+---");
            printf("+ |\n");
             
            if(flag==0)
            printf("| |");
            else printf("|/|");
            for(j=1;j<=p;j++)
            {
                printf("%d /|",c[j]*d[i]/10);   
            }
            printf(" |\n");
             
            printf("| |");
            for(j=1;j<=p;j++)              
            {
                printf(" / |");
            }
            printf("%d|\n",d[i]);
             
            printf("|");
            if(num1==p+k-i+1)
            {
                flag=1;
                printf("%d",e[num1]);
                num1--;
            }
            else printf(" ");
            printf("|");
            for(j=1;j<=p;j++)
            {
                printf("/ %d|",d[i]*c[j]%10);
            }
            printf(" |\n");
        }
         
            printf("| ");
            for(j=1;j<=p;j++)
            printf("+---");
            printf("+ |\n"); 
             
            printf("|");
            for(i=1;i<=p;i++)
            {
                if(i==1)
                {
                    if(flag==1)
                    printf("/ ");
                    else printf("  ");
                    printf("%d ",e[num1]);
                    num1--;
                    continue;
                }
                printf("/ %d ",e[num1]);
                num1--;
            }
            printf("   |\n");
             
            printf("+");
            for(i=1;i<=p*3+p+1+2;i++)
            printf("-");
            printf("+\n");
    }
    return 0;
}

1561: (More) Multiplication的更多相关文章

  1. POJ2505 A multiplication game[博弈论]

    A multiplication game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6028   Accepted:  ...

  2. 【数学】Matrix Multiplication

                                 Matrix Multiplication Time Limit: 2000MS   Memory Limit: 65536K Total S ...

  3. hdu 4920 Matrix multiplication bitset优化常数

    Matrix multiplication Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/ ...

  4. 矩阵乘法 --- hdu 4920 : Matrix multiplication

    Matrix multiplication Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/ ...

  5. Booth Multiplication Algorithm [ASM-MIPS]

    A typical implementation Booth's algorithm can be implemented by repeatedly adding (with ordinary un ...

  6. hdu4951 Multiplication table (乘法表的奥秘)

    http://acm.hdu.edu.cn/showproblem.php?pid=4951 2014多校 第八题 1008 2014 Multi-University Training Contes ...

  7. hdu4920 Matrix multiplication 模3矩阵乘法

    hdu4920 Matrix multiplication Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 ...

  8. poj 1651 Multiplication Puzzle (区间dp)

    题目链接:http://poj.org/problem?id=1651 Description The multiplication puzzle is played with a row of ca ...

  9. 矩阵连乘积 ZOJ 1276 Optimal Array Multiplication Sequence

    题目传送门 /* 题意:加上适当的括号,改变计算顺序使得总的计算次数最少 矩阵连乘积问题,DP解决:状态转移方程: dp[i][j] = min (dp[i][k] + dp[k+1][j] + p[ ...

随机推荐

  1. Linux复制某个目录下结构

    Linux复制某个目录下结构 ​结合tree命令把当前目录下的文件夹路径存储到document.txt文件,然后再使用mkdir命令把document.txt文件下的目录输入创建: tree -fid ...

  2. 【Spring】 Spring的核心容器

    Spring的核心容器 文章目录 Spring的核心容器 BeanFactory ApplicationContext 1.通过ClassPathXmlApplicationContext创建 2.通 ...

  3. 【Python】简单的脚本,轻松批量修改文件名称

    使用python脚本,批量修改文件夹名称 先创建一些没用的案例文件 import os #创建新文件夹 dir = os.makedirs('D:\\SomeThing\\testfile') #将文 ...

  4. SDUST数据结构 - chap8 查找

    选择题: 函数题: 6-1 二分查找: 裁判测试程序样例: #include <stdio.h> #include <stdlib.h> #define MAXSIZE 10 ...

  5. 前端面试之ES6中的继承!

    前端面试之ES6中的继承! ES6之前并没有给我们提供 extends继承.我们可以通过构造函数+原型对象模拟实现继承,被称为组合继承. 1 call() 两个作用: 1 调用这个函数! 2 修改函数 ...

  6. Python+Selenium+Unittest实现PO模式web自动化框架(1)

    1.什么是PO模式? PO是Page Object的缩写 PO模式是自动化测试项目开发实践的最佳设计模式之一,讲页面定位和业务操作分开,也就是把对象的定位和测试脚本分开,从而提供可维护性. 主要有以下 ...

  7. 服务端 TCP 连接的 TIME_WAIT 过多问题的分析与解决

    https://mp.weixin.qq.com/s/VRQ_12tzy3gRYD091cI7Ew

  8. # Set the asyncio reactor's event loop as global # TODO: Should we instead pass the global one into the reactor?

    daphne/server.py at master · django/daphne https://github.com/django/daphne/blob/master/daphne/serve ...

  9. Redis连接池的相关问题分析与总结

    https://mp.weixin.qq.com/s/juvr89lAvM0uuDmyWyvqNA 阿里干货课堂丨Redis连接池的相关问题分析与总结 原创 技术僧 Java进阶与云计算开发 2018 ...

  10. vue组件中data为什么必须是一个函数?

    因为JavaScript的特性所导致,在component中,data必须以函数的形式存在,不可以是对象. 组建中的data写成一个函数,数据以函数返回值的形式定义,这样每次复用组件的时候,都会返回一 ...