大数相乘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);}}