大数相乘

大数相乘主要就是指那些数字太大,超出long等字符型的界限范围,那么的话对于这种情况我们可以使用字符串,数组(字符数组省空间),进行相应的表示,那么的话就相应的应该可以得到最终的表示结果,对于这种大数相乘的话,个人感觉有3点要注意的,第一就是对于每个大数使用数组表示之后相应的规律,第二就是对于相乘之后的进位,第三就是对于处理大数的时候,我们应该从大数的个位开始考虑进位,但是对应的用数组表示的话就是要从最高位也就是下标最高的地方开始,那才是个位,这里介绍的是最简单的一种处理方法,以后会有更高效的方法:代码/*c风格的字符串是常量,不可以修改,可以使用数组的那种方式访问,你对他进行修改,无论是星号的访问还是使用数组类型的访问都不可以修改数字*/
//所谓的大数,就是很大,不容易使用一个int ,long,等等表示出来的,那么我们可以存放在字符串或者是数组(坑爹的华为一面试官说不行,考)
//这里使用字符串进行存放,或者实际上可以使用数组存放,数组使用char型数组。
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
void multiple(const char* a,const char* b,char *c)//c是一个字符数组,不可以用字符串常量
{
int i,j,*s;
int str1=strlen(a);
int str2=strlen(b);
s=(int*)malloc((str1+str2)*sizeof(int));//存放的是数字
for(i=0;i<str1+str2;++i)
s[i]=0;
for(i=0;i<str1;++i)
for(j=0;j<str2;++j)
{
int tmp = s[i+j];
int tmp1 = (a[i]-'0')*(b[j]-'0');
if(tmp != 0)
s[i+j]=tmp+tmp1;//转换成数字
else
s[i+j]=tmp1;
}
for(i=str1+str2-1;i>0;--i)
{
s[i-1]+=s[i]/10;//对于数组而言的话最高位为个位,所以要从高到低处理,这个是进位
s[i]=s[i]%10;
}
i=0;
while(s[i]==0)
++i;
for(j=0;i<str1+str2;++i,++j)
{
c[j]=s[i]+'0';
}
c[j]='\0';//只有最后以空结束的才是字符串常量;
}


int main()
{
string strl1="255";
string strl2="255";
char c[1000]={0};
cout<<"输入2个大数:"<<endl;
multiple(strl1.c_str(),strl2.c_str(),c);
for (int i=0;i<strl1.size()+strl2.size();++i)
{
cout<<c[i];
}
cout<<endl;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值