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]={'
#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;
}
'}; char x2[200]={'
#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;
}
'}; 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; }

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 普罗米修斯监控系统搭建(MAC环境基于Docker)「建议收藏」

    普罗米修斯监控系统搭建(MAC环境基于Docker)「建议收藏」采用Docker环境搭建方式可以快速搭建起测试学习环境第一步:下载docker镜像dockerpullprom/node-exporterdockerpullprom/prometheusdockerpullgrafana/grafana第二步:启动exporter(理解为内置好的监控埋点)dockerrun-d-p9100:9100\-v”/proc:/host/proc:ro”\-v”/sys:/host/sys:ro”\-v”/:/roo

  • 对服务器整体性能画像,2020年抖音用户画像报告:DAU超4亿,整体男女均衡「建议收藏」

    对服务器整体性能画像,2020年抖音用户画像报告:DAU超4亿,整体男女均衡「建议收藏」近日,巨量算数发布2020年抖音用户画像报告。报告中显示,抖音DAU超4亿,较去年同期的2.5亿,增长了60%。抖音与头条的重合度为32.1%,重合用户占抖音的42.2%。抖音与西瓜的重合度为24.6%,重合用户占抖音的29.5%。抖音10-19次占比领先,30分钟以上时长占比提高到38%。抖音整体人群画像,男女较均衡,19-30岁TGI高,新一线、三线及以下城市用户TGI…

  • flask框架搭建步骤_flask 部署

    flask框架搭建步骤_flask 部署Flask框架搭建(一)创建一个Flask框架1、打开pycharm专业版,创建一个flask框架项目,如图:这里的虚拟环境是创建项目之前已经创建好的虚拟环境2、点击创建按钮,跳转到项目主界面,如图:由上图可以看出项目的结构,如图:解析一个应用程序创建完成Flask项目,会自动生成一个应用程序,代码如下:fromflaskimportFlaskapp=Flask(__name__)@app.route(‘/’)#/就是指路由defhello_world

  • 默认位置从c盘改到d盘_怎样将c盘中的文件夹移动至d盘中

    默认位置从c盘改到d盘_怎样将c盘中的文件夹移动至d盘中如何把C盘里的文件默认位置更改到D盘指定目录?1.打开运行,输入%HOMEPATH%2.以”桌面”文件转移到D盘目录为例(其他文档类比进行操作)3.鼠标右键”桌面”选择属性定位到位置标签下

  • 算法时间复杂度分析(一)

    算法时间复杂度分析(一)金庸武侠中描述一种武功招式的时候,经常会用到“快、准、狠”这3个字眼。同样,在计算机中我们衡量一种算法的执行效率的时候也会考量3个方面:“快、省、稳”。具体点来讲就是我们在实现某一种算法的时候,最终目的就是要求计算机(CPU)在最短的时间内,用最少的内存稳定的输出正确的结果。这一章节主要来理解“快”,至于“省”和“稳”,我会在后续章节进行讲解。那如何来判断某一段代码运行的是否足够快呢…

  • linux移动文件到另一个目录命令_Linux怎么解压zip到指定目录

    linux移动文件到另一个目录命令_Linux怎么解压zip到指定目录把xxx.jar移动到根目录里的lib中:mvxxx.jar/lib移动所有:到libmv*/lib把所有文件移动到上一级目录:mv*../

发表回复

您的电子邮箱地址不会被公开。

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