楼主可以利用栈的思想来实现这种另类的乘法。
我做了一个程序,楼主可以作为参考,程序已运行过,无错误。
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define OVERFLOW -2
#define STACK_INIT_SIZE 10
#define STACKINCREMENT 5
typedef struct{
int * base;
int * top;
int stacksize;
}SqStack;
//创建栈
void InitStack(SqStack & S)
{
S.base=(int *)malloc(STACK_INIT_SIZE *sizeof(int));
if(!S.base)
exit(OVERFLOW);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
}
//进栈功能
void Push(SqStack &S,int integer)
{
if(S.top-S.base>=S.stacksize)
{
S.base=(int *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int));
if(!S.base)
exit(OVERFLOW);
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=integer;
}
//用来接收数据
void InputNum(SqStack & S)
{
char ch;
int integer;
while((ch=getchar())!='\n')
{
integer=ch-48;//将字符型数据转换成整型数据(0的ASCII码为48)
Push(S,integer);
}
}
//实现乘法
int Multiple(SqStack S,SqStack T)
{
int internum=0;
int inter;
SqStack M;
InitStack(M);
while(S.top>S.base)
{
M=T;
inter=*(--S.top);
while(M.top>M.base)
internum+=inter * *(--M.top);
}
return internum;
}
void main()
{
int mult;//用来接收两数相乘的返回值
SqStack Data1,Data2;
InitStack(Data1);
InitStack(Data2);
printf("请输入被乘数:");
InputNum(Data1);
printf("\n请输入乘数:");
InputNum(Data2);
printf("\n两数相乘的结果为:");
mult=Multiple(Data1,Data2);
printf("%d\n",mult);
}