#include <string.h>
#include <process.h>
#include "stdio.h"
void change(char *p1,char *p2)
{
char tmp = *p1;
*p1 = *p2;
*p2 = tmp;
}
void charToInt(char *input)
{
char tmp ;
tmp =*input - '0';
if(tmp > 9 || tmp < 0)
{
printf("输入字符错误");
getchar();
exit(1);
}
*input = tmp;
}
void changeBigToLittle(char *pChar)
{
int len = strlen(pChar);
int max = len /2;
int index = 0;
for(index = 0;index < len;index++)
{
charToInt(&pChar[index]);
}
for(index = 0;index < max; index++)
{
change(&pChar[index],&pChar[len - index - 1]);
}
}
void carry(char*p)
{
if(p[0] < 10)
{
return ;
}
else if(p[0] < 100)
{
char tmp ;
tmp = p[0] /10;
p[1] += tmp;
carry(&p[1]);
p[0] = p[0]%10;
}
else
{
printf("there is something error");
}
}
void calc(char *pChengShu,char *pBeiChengShu,char *pResult,int ChengShuLen,int BeiChengShuLen)
{
char *a = pChengShu;
char *b = pBeiChengShu;
char *c = pResult;
int a_max = ChengShuLen;
int b_max = BeiChengShuLen;
int a_index = 0;
int b_index = 0;
for(;a_index < a_max;a_index++)
{
for(b_index = 0;b_index < b_max; b_index ++)
{
c[a_index + b_index] += a[a_index] * b[b_index];
carry(&c[a_index + b_index]);
}
}
}
void printfCharArray(char *p,int len)
{
int l = len-1;
while(p[l] == 0)
{
l--;
}
printf("结果是\n");
for(;l >= 0;l--)
{
printf("%d",p[l]);
}
}
extern int malloc();
extern int free();
int main(void)
{
char *pChengshu;
char *pBeiChengshu;
char *pResult;
int Chengshulen;
int BeiChengshulen;
printf("请输入乘数\n");
pChengshu = (char *)malloc(1000);
if(NULL == pChengshu)
{
printf(" 申请内存失败");
exit(1);
}
memset(pChengshu,0,1000);
scanf("%s",pChengshu);
Chengshulen = strlen(pChengshu);
pBeiChengshu = (char *)malloc(1000);
if(NULL == pBeiChengshu)
{
printf(" 申请内存失败");
exit(1);
}
memset(pBeiChengshu,0,1000);
printf("请输入被乘数\n");
scanf("%s",pBeiChengshu);
BeiChengshulen = strlen(pBeiChengshu);
if(BeiChengshulen == 0 || Chengshulen == 0)
{
printf("输入错误");
getchar();
exit(1);
}
//申请存入结果的地址的空间
pResult = (char *)malloc(BeiChengshulen + Chengshulen);
memset(pResult,0,BeiChengshulen + Chengshulen);
if(NULL == pResult)
{
printf("申请内存失败");
getchar();
exit(1);
}
//把乘数跟被被乘数转换成数字
changeBigToLittle(pBeiChengshu);
changeBigToLittle(pChengshu);
//计算结果
calc(pBeiChengshu,pChengshu,pResult,BeiChengshulen,Chengshulen);
//打印结果
printfCharArray(pResult,BeiChengshulen + Chengshulen);
scanf("%s",pBeiChengshu);
//释放所有的内存
free(pBeiChengshu);
free(pChengshu);
free(pResult);
//
//
//
}