# UVa 10106 Product

【题目链接】

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1047

【解题思路】

http://blog.csdn.net/jcr624/article/details/38128401

bigNumber y;//保存乘法结果
for (int i = 0; i < len; i ++)//左乘数遍历整数位
{
bigNumber mult;//保存左乘数当前位与右乘数相乘的结果
int temp;
for (int j = 0, a = 0; a || j < x.len; j ++)//右乘数遍历整数位
{
int k = i+j;//k为两者相乘的结果应存放的位置，如两个乘数第0位和第0位相乘，结果应该在y的第0位
temp = a+num[i]*x.num[j];
mult.num[k ++] = temp % 10;
a = temp/10;
mult.len = k;
}
y = y+mult;//模拟手算过程，右乘数遍历结束后执行一次加法，直到左乘数遍历结束
}

111111*0

【代码】

#include	<stdio.h>
#include	<string.h>
#include	<stdlib.h>

int MAX(int a, int b)
{
return a > b ? a : b;
}

typedef struct bigNumber
{
int num[800];
int len;

bigNumber()
{
memset(num, 0, sizeof (num));
len = 0;
}

bigNumber operator= (const bigNumber x)
{
len = x.len;
for (int i = 0; i < len; i ++)
{
num[i] = x.num[i];
len = x.len;
}
return *this;
}
bigNumber operator+ (const bigNumber x) const
{
bigNumber y;
int max_len = MAX(len, x.len);
for (int i = 0, a = 0; a || i < max_len; i ++)
{
int temp = a;
if (i < len) temp = temp+num[i];
if (i < x.len) temp = temp+x.num[i];
y.num[y.len ++] = temp%10;
a = temp/10;
}

return y;
}

bigNumber operator* (const bigNumber x) const
{
bigNumber y;//保存乘法结果
for (int i = 0; i < len; i ++)//左乘数遍历整数位
{
bigNumber mult;//保存左乘数当前位与右乘数相乘的结果
int temp;
for (int j = 0, a = 0; a || j < x.len; j ++)//右乘数遍历整数位
{
int k = i+j;//k为两者相乘的结果应存放的位置，如两个乘数第0位和第0位相乘，结果应该在y的第0位
temp = a+num[i]*x.num[j];
mult.num[k ++] = temp % 10;
a = temp/10;
mult.len = k;
}
y = y+mult;//模拟手算过程，右乘数遍历结束后执行一次加法，直到左乘数遍历结束
}

int flag = 0;
for (int i = 0; i < y.len; i ++)
{
flag = flag | y.num[i];//整数位当中只有有一位不为0，可断定这个整数肯定不是0
}
if (flag == 0)
y.len = 1;//去除前导0

return y;
}

void input(char *x)//将字符串逆转，保存在整型数组里
{
len = strlen(x);
for (int i = 0; i < len; i ++)
{
num[i] = x[len-1-i]-'0';
}
}

void output()//逐位输出结果，注意这里的数组保存是逆序的
{
for (int i = len-1; i >= 0; i --)
{
printf("%d", num[i]);
}
}

}bigNumber;

int main()
{
char str1[300], str2[300];
while (~scanf("%s %s", str1, str2))
{
bigNumber a, b, c;
a.input(str1);
b.input(str2);
c = a*b;
c.output();
printf("\n");
}
return 0;
}

• 点赞
• 评论
• 分享
x

海报分享

扫一扫，分享海报

• 收藏
• 手机看

分享到微信朋友圈

x

扫一扫，手机阅读

• 打赏

打赏

coaspire

你的鼓励将是我创作的最大动力

C币 余额
2C币 4C币 6C币 10C币 20C币 50C币
• 一键三连

点赞Mark关注该博主, 随时了解TA的最新博文

05-26 678
08-30 397
09-13 638
09-01 114
05-04 936
08-17 522