51nod-1027 大数乘法

基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
收藏
关注
给出2个大整数A,B,计算A*B的结果。
Input
第1行:大数A
第2行:大数B
(A,B的长度 <= 1000,A,B >= 0)
Output
输出A * B
Input示例
123456
234567
Output示例
28958703552
#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
#define INF Ox3f3f3f3f
char a[1001],b[1001];
int ai[1001],bi[1001];
int c[2002];
char str[2002];
int main(){
	int i,j;
	scanf("%s%s",a,b);
	int len_a=strlen(a);
	int len_b=strlen(b);
	memset(c,0,sizeof(c));
	memset(str,0,sizeof(str));
	int k=0;
	for(i=len_a-1;i>=0;i--)
	   ai[k++]=a[i]-'0';
	k=0;
	for(i=len_b-1;i>=0;i--)
	   bi[k++]=b[i]-'0';
	for(i=0;i<len_b;i++)   //用大整数b的每位去乘大整数a 
	{
		int start=i;      //得到的中间结果跟大整数b中的位对齐 
		for(j=0;j<len_a;j++)
		 c[start++]+=ai[j]*bi[i];
	}
	for(i=0;i<2002;i++){     //低位向高位进位
		if(c[i]>9){
			c[i+1]+=c[i]/10;
			c[i]=c[i]%10;
		}
	}
	for(i=2002;i>=0;i--)    //求乘积的长度 
		{
		if(c[i]) 
		   break;
		}
		int lenp=i+1;     //乘积的长度 
		for(i=0;i<lenp;i++)     //将乘积转换成字符形式 
			str[lenp-1-i]=c[i]+'0';
		//str[lenp]=0;  //串结束标志 
		printf("%s\n",str);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/lookqaq/article/details/80455914
今日推荐