#北大poj#1001Exponentiation求幂
2018-06-18 04:09:37来源:未知 阅读 ()
附上原题地址:http://poj.org/problem?id=1001
首先分析题目,列出了我认为几个比较重要的点:
-
columns 1~6, columns 8~9;
-
全输入完后,全输出;
-
巨大的精确计算;
- 小数时首末尾零去掉;
接下来逐个击破;
- 输入两个整数,算乘积
因为是很大的数,所以已经超出了int,或是long long double所能计算的范围,于是想到了用数组的方法去处理。
将乘数保存到数组里,然后用列竖式的思想,进行个位的计算和进位。模拟如下:
a[0] a[1] a[2] a[3] a[4]
X b[0] b[1] b[2] b[3] b[4]
----------------------------------------------------------------------------
[0][4] [1][4] [2][4] [3][4] [4][4]
[0][3] [1][3] [2][3] [3][3] [4][3]
[0][2] [1][2] [2][2] [3][2] [4][2]
[0][1] [1][1] [2][1] [3][1] [4][1]
[0][0] [1][0] [2][0] [3][0] [4][0]
----------------------------------------------------------------------------
c[0] c[1] c[2] c[3] c[4] c[5] c[6] c[7] c[8]
然后,在写这一步代码前我先列了一个实例来明确每一步的目的:
9 9
X 9 9 //建成两个乘数数组,数组长度即为数的位数
---------------------
81 81
81 81
---------------------
81 162 81 //进位前各位的相乘与加和
---------------------
81 170 1
---------------------
98 0 1 //进位完毕
下面是实现了“输入两个整数,算乘积”的代码:
1 #include <stdio.h>
2 int main() {
3 int la,lb,l,i,j;
4 char aa[50],bb[50];
5 scanf("%s %s",aa,bb);
6 la = strlen(aa);
7 lb = strlen(bb);
8 l=la+lb-1;
9 int a[la],b[lb],ab[l],c[l];
10 for(i=0;i<la;i++){
11 a[i]=(int)aa[i]-48;
12 }
13 for(i=0;i<lb;i++){
14 b[i]=(int)bb[i]-48;
15 }//两个乘数数组搞定
16 for(i=l-1;i>=0;i--){
17 ab[i]=0;
18 for(j=la-1;j>i-lb;j--){
19 if(i-j>=0&&j>=0){
20 ab[i]=ab[i]+a[j]*b[i-j];
21 }
22 }
23 }
24 for(i=0;i<l;i++){
25 c[i]=ab[i];
26 }//ab进位前搞定
27 printf("\n");
28 for(i=l-1;i>=1;i--){
29 c[i]=ab[i]%10;
30 ab[i-1]=ab[i-1]+(ab[i]-c[i])/10;
31 }
32 c[0]=ab[0];
33 for(i=0;i<l;i++){
34 printf("%d",c[i]);
35 }
36 return 0;
37 }
- 输入多个乘数后,分行输出结果
这里用到了一个语句:while(scanf("%s%d",s,&n)==2)或者也可写作while(scanf(%s%d",s,&n)!=EOF)
作用就是输入数据输入完成以后则跳出循环。
下面是实现了“输入多个乘数后,分行输出结果”的代码:
1 #include <stdio.h>
2 int main() {
3 int x[100],y[100],z[100],i=0,j;
4 while(scanf("%d %d",&x[i],&y[i])==2){
5 z[i]=x[i]*y[i];
6 i++;
7 }
8 for(j=0;j<i;j++){
9 printf("%d\n",z[j]);
10 }
11 return 0;
12 }
还没做完orz
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:C语言基础
下一篇:求a和b的最大公约数
- 北大ACM(POJ1009-Edge Detection) 2018-06-18
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash