就是乘法【NOIP2016提高A组模拟9.24】
来源:互联网 发布:软件系统安全 编辑:程序博客网 时间:2024/06/05 23:46
题目
这一天富爷又来找大头玩乘法游戏,然而不同于富爷的口算能力,大头只能列下了式子。第一题是432 × 5678:
432
5678
-------
3456
3024
2592
2160
-------
2452896
作为环保主义者的大头,认为最后一行的答案一定不能有任何的前导空格,当然了,对于某些行来说前导空格不能省。但是,珍惜资源的大头,认为任何一行都不能有任何的后导空格。作为完美主义者的大头,认为每一行的长度都应该和最后的答案行匹配。
啊,对了,有时大头还会遇到富爷的坑,假如第二个乘数有一个位置是0的话,你会发现一个0就是对应行的答案,那就把0挪到下一行,并省去这一行~~举个例子,对于200001 × 90040:
200001
90040
-----------
8000040
180000900
-----------
18008090040
第四行的最右边是一个0,就是前一行(已省去)挪下来的,而第五行的最后两个0,则是由前两行(已省去)挪下来的。
最后一个坑,对于那些只有一行中间答案的,那么最后一部分也可以省略,
246 × 70:
246
70
-----
17220
在富爷压迫下的人民,你们准备好了吗?
样例输入:
输入文件有多组测试数据,每行包含两个正数a,b,保证a,b均不超过6位。
当a = b = 0时,该数据结束,该组并不需要输出。
432 5678
200001 90040
246 70
0 0
样例输出:
剖解题目
求两个不超过
思路
模拟。
然而比赛时进位没有处理好,就挂了。
解法
模拟,可以用字符串,用数时记得开longlong。
代码
#include<cstdio>#include<algorithm>#include<cstring>#define ll long long#define fo(i,a,b) for (int i=a;i<=b;i++)#define down(i,a,b) for(int i=a;i>=b;i--)using namespace std;ll ans[15][15],x1,x2,x3;int main(){ //freopen("T.in","r",stdin);// freopen("T.out","w",stdout); int time=0; scanf("%lld%lld",&x1,&x2); while (x1&&x2) { x3=x1*x2; ll xx1=x1,xx2=x2,num3=0; ll hg=x3,bn=0; memset(ans,255,sizeof(ans)); while (hg) { ++num3; hg/=10; } for(int pos=num3;xx1;pos--){ ans[1][pos]=xx1%10; xx1/=10; } for(int pos=num3;xx2;pos--){ ans[2][pos]=xx2%10; if (ans[2][pos]!=0) ++bn; xx2/=10; } fo(i,1,num3) ans[3][i]=45; xx2=x2; int kh=4,kl=0; while (xx2){ ll now=xx2%10,pos=0; xx2/=10; if (now){ xx1=x1; while (xx1){ ll u=xx1%10; xx1/=10; if (ans[kh][num3-pos-kl]==-1) ans[kh][num3-pos-kl]=0; ans[kh][num3-pos-kl]=u*now+ans[kh][num3-pos-kl]; if (ans[kh][num3-pos-kl]/10!=0) ans[kh][num3-pos-kl-1]=ans[kh][num3-pos-kl]/10; ans[kh][num3-pos-kl]=ans[kh][num3-pos-kl]%10; ++pos; } ++kh; } else ans[kh][num3-pos-kl]=0; ++kl; } if (bn!=1){ fo(i,1,num3) ans[kh][i]=45; ++kh; for(int pos=num3;x3;pos--){ ans[kh][pos]=x3%10; x3/=10; } } else --kh; printf("Problem %d\n",++time); fo(i,1,kh) { fo(j,1,num3) if (ans[i][j]==-1) printf(" "); else if (ans[i][j]==45) printf("-"); else printf("%d",ans[i][j]); printf("\n"); } scanf("%d%d",&x1,&x2); }}
- 【NOIP2016提高A组模拟9.24】就是乘法
- 【NOIP2016提高A组模拟9.24】就是乘法
- 就是乘法【NOIP2016提高A组模拟9.24】
- 【NOIP2016提高A组模拟9.24】天使的分裂 (矩阵乘法)
- 【NOIP2016提高A组模拟9.24】总结
- jzoj 4709. 【NOIP2016提高A组模拟8.17】Matrix 组合数+乘法逆元
- 【NOIP2016提高A组模拟7.15】斐波那契数列(矩阵乘法)
- 【NOIP2016提高A组模拟9.24】天使的分裂
- JZOJ4798. 【NOIP2016提高A组模拟9.24】天使的分裂
- 【NOIP2016提高A组模拟9.24】天使的分裂
- 天使的分裂【NOIP2016提高A组模拟9.24】
- 【NOIP2016提高A组模拟9.24】天使的分裂
- 【NOIP2016提高A组模拟9.24】我的快乐时代
- 【NOIP2016提高A组模拟9.24】我的快乐时代
- 【NOIP2016提高A组模拟7.15】立方体
- 计数【NOIP2016提高A组模拟7.15】
- 【NOIP2016提高A组模拟7.17】寻找
- 【NOIP2016提高A组模拟7.17】寻找
- Android开发环境搭建
- 手把手教你掌握Design新控件(一)
- 搭建Spark开发环境的几种方式及入门示例
- 图论知识总结
- PHPStorm更改为Apache服务端口,及修改默认的网站目录为PHPStorm的工作目录
- 就是乘法【NOIP2016提高A组模拟9.24】
- js延时提示框
- ascii gbk utf-8 编码问题
- Vim中自动加载cscope.out
- 数组去重
- [刷题]ACM/ICPC 2016北京赛站网络赛 第1题 第3题
- Java之File类
- UITextfield
- Eclipse ADT 使用过程中的错误详解