大数相乘
2016-03-02 08:44
344 查看
#include <stdio.h> #include <string.h> #include <stdlib.h> #define N 100 void GetDigits(int *a,char *s); void multiply(int *a,int *b,int *c); main() { char s1 ,s2 ; int i,j,a ,b ,c[N*2]; printf("\n input number a: "); scanf("%s",s1); printf("\n input number b: "); scanf("%s",s2); //把输入的字符串,按位存放到数组 GetDigits(a,s1); GetDigits(b,s2); multiply(a,b,c); //找到最高位 j=N*2-1; while(c[j]==0) j--; //打印计算结果 printf("\n %s * %s=",s1,s2); for(i=j;i>=0;i--) printf("%d",c[i]); } /*把字符串形式的数字按位存放到数组*/ void GetDigits(int *a, char *s) { int i; char digit; int len=strlen(s); for(i=0;i<N;i++) *(a+i)=0; for(i=0;i<len;i++) { digit=*(s+i); *(a+len-1-i) = digit - '0'; } } /*把a*b的结果存储到数组c中,按位表示*/ void multiply(int *a,int *b,int *c) { int i,j; //先把结果数组设置为0zsw for(i=0;i<N*2;i++) *(c+i)=0; for(i=0;i<N;i++) for(j=0;j<N;j++) *(c+i+j)+=*(a+i) * *(b+j); // 处理进位 for(i=0;i<N*2-1;i++) { *(c+i+1)+=*(c+i)/10; //进位累加到高位 *(c+i)=*(c+i)%10; //该位的最后结果 } }
相关文章推荐
- linux PHP+APACHE手动环境搭建
- 临界区、互斥量、信号量
- ResultSet相关ResultSetMetaData详细
- 如何添加或删除ubuntu用户和组
- [good]ffmpeg直接获取rtsp监控摄像头流信息实现远程监控
- IOS单元测试工具之OCMockito
- 连续子数组的最大和
- 递归2016.3.8
- Docker学习笔记之一,搭建一个JAVA Tomcat运行环境
- jdbcTemplate 获取数据表结构
- 重识JavaScript 之 数据类型的相互转换
- 养生篇——《人体使用手册》的“一招三式”
- 【杭电】[2041]超级楼梯
- 分解质因数
- weblogic.common.resourcepool.ResourceLimitException: No resources currently available in pool JDBC D
- 关于数组和List之间相互转换的方法
- js+css实现回到顶部按钮(back to top)
- 斐波那契数列之递归、循环
- 存储过程2
- js格式化数字 金额按千位逗号分隔