#include <iostream>
#include "string.h"
using namespace std;
#define MAX 100
int main()
{
void Multiplication(char p[],char q[]);
char str1[MAX],str2[MAX];
cout<<"输入第一个大数:"; //输入第一个大数
cin>>str1;
cout<<"输入第二个大数:"; //输入第二个大数
cin>>str2;
Multiplication(str1,str2); //执行函数
return 0;
}
void Multiplication(char P[],char Q[])
{
int i,j,k=0;
int L1,L2;//最为两个大数长度的变量
int s1[MAX],s2[MAX];//将p[]、q[]两个char型转换为int存放在S1 .S2
L1=strlen(P);
L2=strlen(Q);//求参数的长度
int S[MAX][MAX];//定义个二维数组,存放两个整形的数组的相乘结果
for(i=0;i<MAX;i++)//初始化二维数组
for(j=0;j<MAX;j++)
S[i][j]=0;
int total[2*MAX];//一个整形的数组,最后作为输出值
for(i=0;i<L1+L2;i++)
total[i]=0; //初始化total为0
for(i=L1-1,j=0;i>=0;i--,j++)// p从字符型转换成整形 s1,反向存储
s1[i]=P[j]-'0';
for(i=L2-1,j=0;i>=0;i--,j++) //q从字符型转换成整形s2 ,反向存储
s2[i]=Q[j]-'0';
for(i=0;i<L1;i++) //从s2的个位开始分别乘以s1,存入S[i][],L1行;
for(j=0;j<L2;j++)
S[i][j]=s1[i]*s2[j];
for(i=0;i<L1;i++)//对s[][]进行整理,因为其中的元素可能为两位数,故需要将行长度([j])+1
for(j=0;j<L2;j++)
{
S[i][j+1]+=S[i][j]/10;
S[i][j]=S[i][j]%10;
}
for(i=0;i<L1;i++)//对整理后的二维数组进行错位相加,传送到total[];
{
k=i;
for(j=0;j<=L2;j++) //因为相乘后的列数增加了1,所以对L2可以用=
total[k++]+=S[i][j];
}
for(i=0;i<L1+L2;i++)
{
total[i+1]+=total[i]/10;
total[i]=total[i]%10;
}
int length;
if (total[L1+L2-1])//如果最高位不为0
length=L1+L2;//总长度为L1+L2
else
length=L1+L2-1;//从L1+L2的下一位开始
for(i=length-1;i>=0;i--)//反向输出从高位到低位的正向数字
cout<<total[i];
cout<<endl;
}
没有合适的资源?快使用搜索试试~ 我知道了~
简单大数相乘,用数组存数
共13个文件
pdb:2个
obj:1个
plg:1个
需积分: 9 20 下载量 112 浏览量
2009-06-26
17:13:59
上传
评论
收藏 847KB RAR 举报
温馨提示
实现简单的正数相乘,代码简单,大数只能用字符型来存储,因为int最大也就几万,所以要实现字符到整数之间的转换的。还有要进行反向存储数字,反向输出。具体问题在代码中有实现与说明
资源推荐
资源详情
资源评论
收起资源包目录
大数相乘.rar (13个子文件)
大数相乘
大数相乘1.dsw 526B
大数相乘1.ncb 41KB
大数相乘1.plg 765B
大数相乘1.dsp 3KB
大数相乘1.opt 48KB
Debug
vc60.pdb 108KB
大数相乘1.pch 1.91MB
大数相乘1.exe 524KB
vc60.idb 73KB
大数相乘1.pdb 1.03MB
大数相乘1.obj 174KB
大数相乘1.ilk 757KB
大数相乘1.cpp 2KB
共 13 条
- 1
资源评论
khtnly
- 粉丝: 2
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功