1561: (More) Multiplication
Description
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 |
+---------------+
centered vertically at the center of its row in the grid. A single cell of the grid, such as
|3 /|
| / |
|/ 0|
+---+
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 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 |
+-----------+
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的更多相关文章
- POJ2505 A multiplication game[博弈论]
		
A multiplication game Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6028 Accepted: ...
 - 【数学】Matrix Multiplication
		
Matrix Multiplication Time Limit: 2000MS Memory Limit: 65536K Total S ...
 - hdu 4920 Matrix multiplication bitset优化常数
		
Matrix multiplication Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/ ...
 - 矩阵乘法 --- hdu 4920 : Matrix multiplication
		
Matrix multiplication Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/ ...
 - Booth Multiplication Algorithm [ASM-MIPS]
		
A typical implementation Booth's algorithm can be implemented by repeatedly adding (with ordinary un ...
 - hdu4951 Multiplication table (乘法表的奥秘)
		
http://acm.hdu.edu.cn/showproblem.php?pid=4951 2014多校 第八题 1008 2014 Multi-University Training Contes ...
 - hdu4920 Matrix multiplication 模3矩阵乘法
		
hdu4920 Matrix multiplication Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 ...
 - poj 1651 Multiplication Puzzle (区间dp)
		
题目链接:http://poj.org/problem?id=1651 Description The multiplication puzzle is played with a row of ca ...
 - 矩阵连乘积 ZOJ 1276 Optimal Array Multiplication Sequence
		
题目传送门 /* 题意:加上适当的括号,改变计算顺序使得总的计算次数最少 矩阵连乘积问题,DP解决:状态转移方程: dp[i][j] = min (dp[i][k] + dp[k+1][j] + p[ ...
 
随机推荐
- 安装weblogic 11g
			
参考 https://blog.csdn.net/z69183787/article/details/38401013 https://blog.csdn.net/wjf8882300/article ...
 - Docker 镜像仓库使用(六)
			
阿里云docker 容器镜像服务: www.aliyun.com 1 服务开通 (开通的时候要求创建密码请牢记此密码) 2 创建命名空间 3 创建镜像仓库 4 linux 客户端登录 登录: dock ...
 - 【Spring】Spring中的Bean - 4、Bean的生命周期
			
Bean的生命周期 简单记录-Java EE企业级应用开发教程(Spring+Spring MVC+MyBatis)-Spring中的Bean 了解Spring中Bean的生命周期有何意义? 了解Sp ...
 - [翻译]Azure 网关迁移至 .NET Core 3.1 性能提升一倍
			
原文:[Azure Active Directory's gateway is on .NET Core 3.1!] Azure Active Directory 的网关服务是一个反向代理,它为构成 ...
 - 1.5V转3V电源芯片,1.5V转3V稳压芯片
			
1.5V干电池的供电电压一般是0.9V-1.6V左右,因为供电电压不稳,所以需要1.5V转3V的稳压电源芯片,当0.9V-1.6V输入电压时,输出电压能稳定3V输出,给模块供电,MCU供电,LED灯供 ...
 - EntityFramework Core如何映射动态模型?
			
前言 本文我们来探讨下映射动态模型的几种方式,相信一部分童鞋项目有这样的需求,比如每天/每小时等生成一张表,此种动态模型映射非常常见,经我摸索,这里给出每一步详细思路,希望能帮助到没有任何头绪的童鞋, ...
 - Python执行程序实可视化_heartrate
			
最近发现了一个Python程序执行的简单实时可视化神器,名字叫 heartrate,安装完运行可以看到下面这样的炫酷过程. 虽然很炫酷,但有点看不懂. 来解释下,左边的动态数字代表每行被触发的次数.变 ...
 - PCB导线长宽与电源压降
			
为了计算PCB中电源线走线后的压降,需要知道PCB中使用的铜的电阻率, PCB板中的铜是直接贴上去的铜箔,因此可以当成纯铜(我问了PCB打样的厂家他们的铜的电阻率,但是他们给我说不知道,所以干脆就当成 ...
 - git的使用学习笔记---分支删除
			
一.使用场景: 1.修改bug,原来分支不管用 2,分支太多不易管理 二.方法 git branch -d branch1 无法删除:原因在与该分支为目前工作的分支,所以要切换分支 git check ...
 - 为什么要使用 do while(0)?
			
两点 避免宏定义的花括号对代码的完整性造成影响 可以在指定的代码块中(do{})使用break提前跳出,避免goto.