大数相乘
来源:互联网 发布:赫德森太太知乎 编辑:程序博客网 时间:2024/06/09 20:03
大数相乘
简单版大数相乘模板
代码1:
#include<stdio.h>#include<string.h>int main(){ char a[110],b[110]; while(~scanf("%s %s",a,b)) { int c[110],d[110],e[110]; memset(e,0,sizeof(e)); int i=0,j=0; int la=strlen(a)-1; int lb=strlen(b)-1; while(la>=0) { c[i++]=a[la--]-'0';//反转 } int ans=i; while(lb>=0) { d[j++]=b[lb--]-'0';//反转 } int cnt=j; for(i=0; i<ans; i++) { for(j=0; j<cnt; j++) { e[i+j]+=c[i]*d[j];//记录两个数每一位相乘的积 } } int t=ans+cnt; for(i=0; i<=t; i++) { e[i+1]+=e[i]/10;//进位 e[i]=e[i]%10; } for(i=t; i>=0; i--) if(e[i]) break;//去除前面多余的0 if(i!=-1) { for(j=i; j>=0; j--) printf("%d",e[j]); } else//当结果是0的时候 printf("0"); printf("\n"); } return 0;}代码2:
#include<stdio.h>#include<string.h>char a[50001],b[50001];int c[50001],d[50001],e[50001];int main(){ while(~scanf("%s%*c%s",a,b)) { memset(c,0,sizeof(c)); memset(d,0,sizeof(d)); memset(e,0,sizeof(e)); int i=0,j=0,la,lb,m,n,k,x,y,v,u; la=strlen(a)-1; lb=strlen(b)-1; while(la>=0) c[i++]=a[la--]-'0'; while(lb>=0) d[j++]=b[lb--]-'0'; for(u=0;u<i;u++) { y=0; x=u; for(v=0;v<j;v++) { e[x]+=c[u]*d[v]+y; e[x]=e[x]%10; y=e[x]/10; x++; } } for(j=x+1;j>=0;j--) { if(e[j]) break; } for(i=j;i>=0;i--) printf("%d",e[i]); printf("\n"); } return 0;}
1 0
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- •算法分析中常见的复杂度
- 五类IP地址范围及作用
- 五.如何用批处理文件来操作注册表
- windows错误事件10016解决方案
- 19. Remove Nth Node From End of List leetcode list
- 大数相乘
- Remove Duplicates from Sorted Array
- UGUI部分事件接口讲解以及一个很简单动态添加事件类
- Linux—系统目录结构
- 12061
- JPA 菜鸟教程 5 双向一对多
- mysql 5.7.16解压版安装过程
- nodejs 表格分页工具类
- 彻底了解指针数组,数组指针,以及函数指针,以及堆中的分配规则