/*************************************************************
FileName : testMultiply.cpp
FileFunc : 两个大数相乘
Version : V0.1
Author : Sunrier
Date : 2011-09-02
Descp : 两个十进制大数相乘
*************************************************************/
#include <stdio.h>
#include <string.h>
#define MAXLEN 100 //单个数据的最大长度
void Conv_StrToInt(char *str,int *iData);
void MultiplyData(int *iDataA,int *iDataB,int *iResult);
int main( void )
{
int iDataA[MAXLEN],iDataB[MAXLEN],iResult[2*MAXLEN];
char strA[MAXLEN],strB[MAXLEN];
printf("请输入第一个数字:");
scanf("%s",strA);
printf("请输入第二个数字:");
scanf("%s",strB);
memset(iDataA,0,sizeof(iDataA));
Conv_StrToInt(strA,iDataA);
memset(iDataB,0,sizeof(iDataB));
Conv_StrToInt(strB,iDataB);
memset(iResult,0,sizeof(iResult));
MultiplyData(iDataA,iDataB,iResult);
int iResultLen =2*MAXLEN-1;
while( !iResult[iResultLen] )
{
--iResultLen;
}
printf("两个数字相乘结果为:");
for(int i=iResultLen ;i>=0 ;i--)
{
printf("%d",iResult[i]);
}
printf("\n");
return 0;
}
void Conv_StrToInt(char *str,int *iData)
{
int iLen;
iLen = strlen(str);
for(int i=0 ;i<iLen ;i++)
{
*(iData+iLen-i-1) = *(str+i)-'0';
}
}
void MultiplyData(int *iDataA,int *iDataB,int *iResult)
{
for(int i=0 ;i<MAXLEN ;i++)
{
for(int j=0 ;j<MAXLEN ;j++)
{
iResult[i+j] += iDataA[i]*iDataB[j];
iResult[i+j+1] += iResult[i+j]/10;
iResult[i+j] %= 10;
}
}
}
两个十进制大数相乘
最新推荐文章于 2023-01-01 19:06:40 发布