您的位置:首页 > 其它

大数相加 大数相乘 模板

2014-05-18 20:27 183 查看
void multiply(const char *a,const char *b)//大数相乘
{
int i,j,ca,cb,*s;
ca=strlen(a);
cb=strlen(b);
s=(int *)malloc(sizeof(int)*(ca+cb));   //分配存储空间
for (i=0;i<ca+cb;i++) s[i]=0;      // 每个元素赋初值0

for (i=0;i<ca;i++)
for (j=0;j<cb;j++)
s[i+j+1]+=(a[i]-'0')*(b[j]-'0');

for (i=ca+cb-1;i>=0;i--)        // 这里实现进位操作
if (s[i]>=10)
{
s[i-1]+=s[i]/10;
s[i]%=10;
}
char *c=(char *)malloc((ca+cb)*sizeof(char));  //分配字符数组空间,因为它比int数组省!
i=0;
while(s[i]==0) i++;   // 跳过头部0元素
for (j=0;i<ca+cb;i++,j++) c[j]=s[i]+'0';
c[j]='\0';
for (i=0;i<ca+cb;i++)
cout<<c[i];
cout<<endl;
free(s);
}

 

 

 

string sum(string s1,string s2) //大数相加
{
if(s1.length()<s2.length())
{
string temp=s1;
s1=s2;
s2=temp;
}
for(int i=s1.length()-1,j=s2.length ()-1;i>=0;i--,j--)
{
s1[i]=char(s1[i]+(j>=0?s2[j]-'0':0));
if(s1[i]-'0'>=10)
{
s1[i]=char((s1[i]-'0')%10+'0');
if(i)
s1[i-1]++;
else
s1='1'+s1;
}
}
return s1;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: