加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

大数乘除

发布时间:2020-12-14 04:09:21 所属栏目:大数据 来源:网络整理
导读:大数乘 问题描述 求两个不超过 200 位的非负整数的积。 输入数据 有两行,每行是一个不超过 200 位的非负整数,没有多余的前导 0。 输出要求一行,即相乘后的结果。结果里不能有多余的前导 0,即如果结果是 342,那么就不能输出为 0342。? 输入样例 12345678

大数乘

问题描述
求两个不超过 200 位的非负整数的积。
输入数据
有两行,每行是一个不超过 200 位的非负整数,没有多余的前导 0。
输出要求一行,即相乘后的结果。结果里不能有多余的前导 0,即如果结果是 342,那么就不能输出为 0342。?
输入样例
12345678900
98765432100
输出样例
1219326311126352690000

//大数相乘
#include <stdio.h>
#include <string.h>
#define MAX_LEN 200
unsigned an1[MAX_LEN+10];
unsigned an2[MAX_LEN+10];
unsigned aResult[MAX_LEN*2+10];
char szLine1[MAX_LEN+10];
char szLine2[MAX_LEN+10];
int main(void)
{
	gets(szLine1);
	gets(szLine2);
	int len1=strlen(szLine1);
	int len2=strlen(szLine2);
	int i,j;
	for(i=0;i<len1;i++){
		an1[i]=szLine1[len1-1-i]-'0';
	}
	for(i=0;i<len2;i++){
		an2[i]=szLine2[len2-1-i]-'0';
	}
	for(i=0;i<len2;++i){
		for(j=0;j<len1;++j){
			aResult[i+j]+=an2[i]*an1[j];//关键,第2个数第i位与第1个数的第j位相乘,加到结果中的第i+j位
		}
	}
	//处理进位
	for(i=0;i<=len1+len2+1;++i){
		if(aResult[i]>=10){//注意是>=10,不是>10
			aResult[i+1]+=aResult[i]/10;
			aResult[i]%=10;
		}
	}
	//输出结果
	int startOutput=0;
	for(i=len1+len2+1;i>=0;--i){
		if(startOutput){
			printf("%d",aResult[i]);
		}else if(aResult[i]!=0 ){//开始输出
			flag=1;
			printf("%d",aResult[i]);
		}
	}
	if(!startOutput){
		printf("0");
	}
	printf("n");
	return 0;
}

大数除法,下次补充 ?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读