您的位置:首页 > 其它

UVa 10106 - Product

2014-09-13 16:04 381 查看
题目:大整数乘法。

分析:大整数,模拟。

说明:注意数组清零。

#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>

using namespace std;

int  A[505],B[505],C[505];

char buf[505];
int  input(int *a)
{
	if (scanf("%s",buf) == EOF) return 0;
	for (int i = 0 ; i < 505 ; ++ i)
		a[i] = 0;
	int len = strlen(buf);
	for (int i = 0 ; i < len ; ++ i)
		a[i] = buf[len-1-i] - '0';
	return 1;	
}

void multiply (int *c, int *a, int *b)
{
	for (int i = 0 ; i < 505 ; ++ i)
		c[i] = 0;
	for (int i = 0 ; i < 251 ; ++ i)
	for (int j = 0 ; j < 251 ; ++ j)
		c[i+j] += a[i]*b[j];
	for (int i = 0 ; i < 505 ; ++ i) {
		c[i+1] += c[i]/10;
		c[i] %= 10;
	}
}

void output(int *a)
{
	int end = 504;
	while (!a[end] && end > 0) -- end;
	while (end >= 0) printf("%d",a[end --]);
	printf("\n");
}

int main()
{
	while (input(A)) {
		input(B);
		multiply(C, A, B);
		output(C);
	}
	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: