求助c++程序高精度乘法

主要是想问我的程序哪里错了,或是哪里还可以改进,谢谢。#include<iostream>#include<cstdlib>#include<string>#includ... 主要是想问我的程序哪里错了,或是哪里还可以改进,谢谢。

#include <iostream>
#include <cstdlib>
#include <string>
#include <cmath>
#include <memory.h>
using namespace std;
int val(string s)
{
return (atoi(s.c_str()));
}
int s2n(string s,int *n)
{
for(int i=s.size(),j=-1;;)
{
if(i<4)
{
n[++j]=val(s.substr(0,i));
break;
}
else
{
i-=4;
n[++j]=val(s.substr(i,4));
}
}
return 0;
}
int z(int n)
{
return ((n-1)/4+1);
}
int main()
{
string s;
int n,l,la,lb,lc;
getline(cin,s);
la=s.size();
int *a=new int [z(la)];
memset(a,0,z(la)*sizeof(int));
s2n(s,a);
getline(cin,s);
lb=s.size();
int *b=new int [z(lb)];
memset(b,0,z(lb)*sizeof(int));
s2n(s,b);
lc=la+lb;
int *c=new int [z(lc)];
memset(c,0,z(lc)*sizeof(int));
for(int i=0;i<z(la);i++)
for(int j=0;j<z(lb);j++)
c[i+j]+=a[i]*b[j];
for(int i=0;i<z(lc);i++)
{
n=c[i]/10000;
c[i]%=10000;
if(n>0)c[i+1]+=n;
}
for(l=(z(lc)-1);(c[l]==0)&&(l>0);l--);
for(int i=l+1;i>0;cout<<c[--i]);
delete [] a;
delete [] b;
delete [] c;
return 0;
}
我是想精确到10000位。
展开
 我来答
White_MouseYBZ
推荐于2016-02-01 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6623万
展开全部
  1. 把for(int i=l+1;i>0;cout<<c[--i]);改成以下

    cout.fill('0');

    for(i=l+1;i>0;cout<<c[--i],cout.width(4));

    cout << endl;

    三句。

  2. 把int *a=new int [z(la)];、int *b=new int [z(lb)];、int *c=new int [z(lc)];分别改成

    int *a=new int [z(la)+1];、int *b=new int [z(lb)+1];、int *c=new int [z(lc)+1];。

  3. 从乘法实现(就是双for和后面c[i+j]+=a[i]*b[j];)看,这代码还有逻辑错误:当数据较大时(比如200个9乘以200个9),连续4位的乘积将超限int的允许值而出错。改进办法是不要计算完了才处理进位——这里我没改,你自己先弄……

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式