大数相乘2
来源:互联网 发布:零复网络是诈骗吗 编辑:程序博客网 时间:2024/06/05 17:56
#include<stdio.h>#include<stdlib.h> //用于malloc#include<string.h> //用于strlen, strlen在stdlib.h中没有声明 #define MAXLEN 100char* multiply(char er[], char cand[]){int erlen=strlen(er);int candlen=strlen(cand);int resultlen=erlen+candlen;int* result=(int*)malloc(sizeof(int)*resultlen);memset(result, 0, sizeof(int)*resultlen);int ernum[MAXLEN];//节约内存的话,可以用short,一个字节,足以表示0-9 int candnum[MAXLEN];for(int i=erlen-1, j=0; i>=0; i--,j++){ ernum[j]=er[i]-'0';}for(int i=candlen-1, j=0; i>=0; i--,j++){ candnum[j]=cand[i]-'0';}//int carry=0;for(int i=0; i<erlen; i++){ int carry=0; int j; for(j=0; j<candlen; j++){ result[i+j]=result[i+j]+ernum[i]*candnum[j]; int temp=result[i+j]+carry; result[i+j]=temp%10; carry=temp/10; } while(carry){ result[i+j]+=carry%10; //或者result[i+j++]等价于result[i+(j++)] carry=carry/10; j++; }}int top;for(top=resultlen-1; top>=0; top--) if(result[top]!=0) break; resultlen=top+1;char* returnvalue=new char[resultlen+1];//char* returnvalue = (char*)malloc(sizeof(char)*(resultlen+1));for(int i=0; i<=resultlen-1; i++) returnvalue[i]=result[resultlen-1-i]+'0';returnvalue[resultlen]='\0';return returnvalue;}int main(){char multiplier[MAXLEN];char multiplicand[MAXLEN];char *result=NULL;while(scanf("%s %s",multiplier,multiplicand)!=EOF){ result=multiply(multiplier,multiplicand); printf("%s\n",result);}}
阅读全文
0 0
- 大数相乘(2)
- 大数相乘2
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- LNNVL
- [LeetCode]646. Maximum Length of Pair Chain<DP>
- 办公室留言系统实现
- 动态表格自动添加ABCD...字母
- 关于字符串不变性的理解 && 双色球代码
- 大数相乘2
- 线性表的基本运算
- 【LeetCode】637. Average of Levels in Binary Tree
- 递归算法,运算1-2+3-4+5-6+...+n
- 文件查找命令
- PAT编程题:部分A+B (15)
- Java直接插入排序算法
- 通过ST官方SPL建立STM32FXXX工程
- 树的重心--cf686d Kay and snowflake