c++解决大整数乘法

c++解决大整数乘法c++解决大整数乘法问题描述:求两个不超过200位的非负整数的积输入数据:输入有两行,每行是一个不超过200位的非负整数,没有多余的前导0。输出要求:输出只一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么不能输出0342。输入样例:1234567890098765432100输出样例:1219326311126352690000解题思路:采用列乘法竖式的求解思路,采用数组…

大家好,又见面了,我是你们的朋友全栈君。

c++解决大整数乘法

问题描述:求两个不超过200位的非负整数的积

输入数据:输入有两行,每行是一个不超过200位的非负整数,没有多余的前导0。

输出要求:输出只一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么不能输出0342。

输入样例:

12345678900

98765432100

输出样例:

1219326311126352690000

解题思路:

采用列乘法竖式的求解思路,采用数组存放逐位相乘后的结果,最后再把低位的进位加到高位上去。

运行结果示例:

c++解决大整数乘法

C++代码如下:

#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
int main()
{
	char x1[200]={'\0'};
	char x2[200]={'\0'};
	int jinwei[401]={0};
	int result[400]={0};
	//输入并求长度
	cin>>x1>>x2;
	int len1=strlen(x1);
	int len2=strlen(x2);
	//字符数组翻转
	strrev(x1);
	strrev(x2);
	//把两乘数由char转化为int数组,便于相乘运算
	int x[200]={0};
	int y[200]={0};
	int i,j;//循环变量
	for(i=0;i<=len1-1;i++)
		x[i]=x1[i]-'0';
	for(i=0;i<=len2-1;i++)
		y[i]=x2[i]-'0';
	//不考虑进位的竖式乘法
	for(j=0;j<=len2-1;j++)
	{
		for(i=0;i<=len1-1;i++)
		{
			result[i+j] += x[i]*y[j];	
		}	
	}
	//求两乘数长度的最大值
	int lenmax=(len1>len2)?len1:len2;
	//逐次把进位累加到结果中(由于累计后的结果可能又产生了新的进位,故需要循环累加)
	for(int times=0;times<=lenmax+1;times++)//循环的次数和竖式的高度有关,为两乘数长度的最大值
	{
		//求进位
		for(i=399;i>=0;i--)
		{
			jinwei[i+1]=result[i]/10;
		}
		//把进位累加到结果中
		for(i=399;i>=0;i--)
		{
			result[i]=result[i]%10+jinwei[i];
		}
	}
	//求result的前导0的位置
	int right_result=0;
	for(i=399;i>=0;i--)
	{
		if( result[i]!=0)
		{
			right_result=i;
			break;
		}
	}
	//省略前导0的输出
	for(i=right_result;i>=0;i--)
		cout<<result[i];
	cout<<endl;
return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/137067.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月2日 下午4:46
下一篇 2022年6月2日 下午4:46


相关推荐

  • Logbook HTTP日志框架

    Logbook HTTP日志框架LogbookHTTP 日志框架 GitHub 文档及代码地址 https github com zalando logbookSprin 使用 Logbook 记录 HTTP 请求响应日志 https mp weixin com s 9LITBfpGqTDT 的 httptrace 端口能够记录每次访问的请求和响应信息 但是不能记录 body 这样在出问题时就不方便排查 而且 httptrace 不方便在原有的基础上进行扩展 所以只能寻求其他方式进行

    2026年3月19日
    3
  • 【python】蒙特卡洛树搜索(MCTS)简单实现

    过程包括以下四步:选择Selection:从根节点R开始,递归选择最优的子节点(后面会解释)直到达到叶子节点L。扩展Expansion:如果L不是一个终止节点(也就是,不会导致博弈游戏终止)那么就创建一个或者更多的字子节点,选择其中一个C。模拟Simulation:从C开始运行一个模拟的输出,直到博弈游戏结束。反向传播Backpropagation:用模拟的结果输…

    2022年4月4日
    56
  • Unity+OpenCV 人脸识别追踪

    Unity+OpenCV 人脸识别追踪项目需要一个人脸识别追踪的效果,所以查找了一些资料,自己做了一个功能,基本效果已经实现了。首先项目需要OpenCV的开发环境,所以首先一定要在开发电脑上装上OpenCV的开发环境,流程很简单,直接去http://opencv.org/downloads.html官网下载OpenCV的安装文件就可以了,然后配置电脑的环境变量。我的电脑是windows操作系统配置好就是这个样子,然后要把用到的

    2022年5月29日
    133
  • Python 进制转换函数及前缀截取

    Python 进制转换函数及前缀截取“人生苦短,我用Python”,强大的Python肯定也自己内置的进制转换函数。十进制转其他进制:10进制数s:a=bin(s)//十进制转2进制b=oct(s)//十进制转8进制c=hex(s)//十进制转16进制其他进制转成10进制:s:转换的字符串r:要转换的进制位数2,6,18int(s,r)…

    2022年5月12日
    50
  • 冒泡排序java代码

    冒泡排序java代码还可以优化的,小白可以参考一下

    2022年6月15日
    30
  • 蓝牙HID键盘码表

    蓝牙HID键盘码表键名 键值 A 0x04 B 0x05 C 0x06 D 0x07 E 0x08 F 0x09 G 0x0A H 0x0B I 0x0C J 0x0D K 0x0E L 0x0F M 0x10 N 0x11 O 0x12 P 0x13 Q 0x14 R 0x15 S 0x16 T 0x17 U

    2026年3月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号