- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
姓名:
学号:
班级:
指导老师:
学院:计算机学院
1 大数相乘
1. 问题描述
两个比较大的数, 超过 long long 类型,相乘,并计算结果。
2.设计思路
通过模拟手工计算两数相乘,从低位乘到高位,两重循环,第一重循环控制
乘数的第 i 位数与被乘数的相乘,第二重循环是被乘数的第 j 位数。第二重
循环每循环完一次,再把结果*10 与上次的结果相加,这里又运用到了大数
相加,这样一直处理到第一重循环结束。只要合理的处理好进位就可以了。
3.数据结构设计
把两数每位数存放数组里,通过控制循环实现相乘。
4. 功能函数设计
void nixu ()
void mul () ;
计算两个存在数组里的大数计算相乘结果。
5. 程序代码
#includeiostream
#includecstring
using namespace std;
void nixu(char* str, int p, int q)
{
char temp;
while(p q)
{
temp = str[p];
str[p] = str[q];
str[q] = temp;
p ++;
q --;
}
}
void mul(char* str1, char* str2)
{
char result[200];
int l1 = strlen(str1);
int l2 = strlen(str2);
memset(result,0,l1+l2);
result[l1+l2] = \0;
nixu(str1, 0, l1-1);
nixu(str2, 0, l2-1);
int index1;
int index2;
for(int i=0;il2; i++)
{
index1 = 0;
index2 = 0;
for(int j=0;jl1;j++)
{
int temp1 = (str1[j] - 0) * (str2[i] - 0) + index1;
index1 = temp1 / 10;
temp1 = temp1 % 10;
int temp2 = (result[i+j] - 0) + temp1 + index2;
index2 = temp2 / 10;
result[i+j] = temp2 % 10 + 0;
}
result[i + l1] += index1 + index2;
}
nixu(result, 0, l1+l2-1);
cout相乘后的数字为:endl;
for(int i=0;il1+l2;i++)
{
if(result[i] != 0)
coutresult[i];
}
coutendl;
}
int main()
{
char str1[100],str2[100];
cout请输入需要相乘的数字endl;
cinstr1;
cinstr2;
int l1 = strlen(str1);
int l2 = strlen(str2);
mul(str1,str2);
return 0;
}
6 运行测试
7 设计心得
大数相乘和大数相加不一样,大数相加比大数相乘简单一些,所以在大数相乘这边花了
一点时间。
2 哈弗曼树
1.问题描述
欲发一封内容为 AABBCAB ……(共长 100 字符,其中:A 、B 、C 、D 、E 、F 分别有
7 、9 、12 、22 、23、27 个
原创力文档


文档评论(0)