69,369
社区成员
发帖
与我相关
我的任务
分享
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 100
void getDigits(int *na, char *sz); //解析数字,放入字符串中
void multiply(int *na, int *nb, int *nc); // 将字符串中的数字相乘
int _tmain(int argc, _TCHAR* argv[])
{
char sz1[N], sz2[N];
int i,j,na[N],nb[N],nc[N*2];
printf("\n input number na:");
scanf("%s", sz1);
printf("\n input number nb:");
scanf("%s", sz2);
getDigits(na, sz1);
getDigits(nb, sz2);
multiply(na, nb, nc);
//找到最高位
j = N * 2 -1;
while (0 == nc[j])
{
--j;
}
//打印计算结果
printf("\n%s * %s = ", sz1, sz2);
for (i = j; i >= 0; i--)
{
printf("%d", nc[i]);
}
getchar();
getchar();
return 0;
}
// 把字符串形式的数字按位存放到数组
void getDigits(int *na, char *sz)
{
int i;
char digit;
int len = strlen(sz);
for (i = 0; i < N; i++)
{
*(na + i) = 0;
}
for (i = 0; i < len; i++)
{
digit = *(sz + i);
*(na + len - 1 - i) = digit - '0';
}
}
//把na*nb的结果存储到数组nc中,按位表示
void multiply(int *na, int *nb, int *nc)
{
int i, j;
// 先把结果数组设置为0
for (i = 0; i < N * 2; i++)
{
*(nc + i) = 0;
}
//竖式乘法
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
*(nc + i + j) += *(na + i) * *(nb + j);
}
}
// 处理进位
for (i = 0; i < N * 2 - 1; i++)
{
*(nc + i + 1) += *(nc + i) / 10; //进位累加到最高
*(nc + i) = *(nc + i) % 10; //该位的最后结果
}
}