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

大数的乘法

发布时间:2020-12-14 02:53:51 所属栏目:大数据 来源:网络整理
导读:题目描述 大数是指计算的数值非常大或者对运算的精度要求非常高,用已知的数据类型无法精确表示的数值。例如:我们要计算如下两个数的乘积时,用我们已知的数据类型是无法精确表示其结果的: a1 = 22222222222222222222222222222222222 b1 = 222222222222222

题目描述

大数是指计算的数值非常大或者对运算的精度要求非常高,用已知的数据类型无法精确表示的数值。例如:我们要计算如下两个数的乘积时,用我们已知的数据类型是无法精确表示其结果的:

a1 = 22222222222222222222222222222222222

b1 = 22222222222222222222222222222222222111

求:a1 * b1;

输入要求

输入两行:每行一个数字,每行的数字不超过100位;

输出要求

输出一行:为这两个大数的乘积

假如输入

2222222222222221111
222222222222222

应当输出

123456790123456666654320987654321

#include<iostream>
#include<algorithm>
#include <vector>
#include<string.h>
#include<ctype.h>
#include<math.h>
using namespace std;
void fun();
int main()
{
    fun();
    return 0;
}
void fun()
{	
	int len1,len2,i,start,j,k,ans[201];
	char str1[100],str2[100];
	gets(str1);
	gets(str2);
	len1=strlen(str1);
	len2=strlen(str2);
	if(str1[0]=='0'||str2[0]=='0')
		cout<<0<<endl;
	else
	{
		memset(ans,sizeof(ans));
		for(i=len1-1,k=0;i>=0;i--,k++)
		{
			for(j=len2-1,start=k;j>=0;j--)
			{
				ans[start++]+=(str1[i]-'0')*(str2[j]-'0');
			}
		}
		for(i=0;i<200;i++)
		{
			if(ans[i]>9)
			{
				ans[i+1]+=ans[i]/10;
				ans[i]%=10;
			}
		}
		for(i=200;i>=0;i--)
			if(ans[i]!=0)
				break;
		for(;i>=0;i--)
			cout<<ans[i];
		cout<<endl;
	}
}
完完整整一步一步分析自己写出来的,加油!

(编辑:李大同)

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

    推荐文章
      热点阅读