24小时热门版块排行榜    

查看: 1505  |  回复: 18
本帖产生 2 个 程序强帖 ,点击这里进行查看
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

青涩草

铜虫 (小有名气)


[交流] 【求助】那位达人给我个大数相乘的算法吧 谢谢了

看了一个大数相乘的算法,运行了一下,但是不对,想看看高手的代码,先谢啦
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

» 抢金币啦!回帖就可以得到:

查看全部散金贴

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zhengyangg

木虫 (初入文坛)


★ ★ ★ ★
青涩草(金币+1):谢谢参与
余泽成(金币+3, 程序强帖+1): 谢谢参与应助! 2011-05-13 21:23:05
#include
#define N 10000
void main()
{
int a[N],n,k,i,j,m,flag=1;//flag代表位数
printf("请输入一个100以内的正数";
scanf("%d",&n);
for(i=1;i<=N;i++)
  a=0;//这个循环使得数组里的每一个元素初值都为0
a[1]=1;//为了便于累乘运算,特殊的将a[1]赋值为1
    for(k=1;k<=n;k++)//大循环用于计算小于n的所有的数
{
  flag=1;
  for(i=1;i<=k;i++)
  {
   for(j=1;j<=flag;j++)
    a[j]*=i;
   for(j=1;j<=flag;j++)
   {
    if(a[j]>9)//从低位到高位判断是否大于9,如果大于,则进位
    {
     for(m=1;m<=flag;m++)
     {
      if(a[flag]>9)
       flag++;//控制所求得的数的阶乘的位数
      a[m+1]+=a[m]/10;
      a[m]=a[m]%10;//将数字分离到每一个数组元素里
     }
    }
   }
   
  }
  printf("%d的阶乘的全部有效数字为",k);
  for(;flag>=1;flag--)
      printf("%d",a[flag]);//从高位往低位依次输出
  printf("\n\n";
  for(i=1;i<=N;i++)
      a=0;
     a[1]=1;//每次运行以上步骤时都会改变数组a中的值,须再次赋值
}
}
16楼2011-05-12 20:36:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 19 个回答

sudo

木虫 (正式写手)



青涩草(金币+1):谢谢参与
贴出来让大家看看哪里不对,嗯...话说大数乘法不难啊,就跟手工算竖式乘法差不多
3楼2011-04-02 17:02:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

goldapplepie

至尊木虫 (正式写手)



青涩草(金币+1):谢谢参与
引用回帖:
Originally posted by 青涩草 at 2011-04-02 16:40:53:
看了一个大数相乘的算法,运行了一下,但是不对,想看看高手的代码,先谢啦

拿出来改吧。
8楼2011-04-02 21:05:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

青涩草

铜虫 (小有名气)


引用回帖:
Originally posted by 青涩草 at 2011-04-02 16:40:53:
看了一个大数相乘的算法,运行了一下,但是不对,想看看高手的代码,先谢啦

#include
#include
using namespace std;
int *multi(int *num1,int size1,int *num2,int size2)
{//返回位数为size1+size2
      int size=size1+size2;
      int *ret=new int [size];
      int i=0;
      memset(ret,0,sizeof(int)*size);
      for(i=0;i       {
                          int k=i;
                          for(int j=0;j                           {
                                  ret[k++]+=num2*num1[j];
                          }
      }
      for(i=0;i       {
                         if(ret>=10)
                         {
                                       ret[i+1]+=ret/10;
                                       ret=ret%10;
                         }
      }
      return ret;
}
int main()
{
    /*int m,n,num1[100],num2[100];
    cout<<"输入第一个数的位数"<     cin>>m;
    cout<<"输入第一个数"<     for(int i=0;i     {
            cin>>num1;
    }
    cout<<"输入第二个数位数"<     cin>>n;
    cout<<"输入第二个数"<     for(int i=0;i     {
            cin>>num2;
    } */
    int num1[]={3,2};
    int num2[]={1,1};
    int *ret=multi(num1,2 ,num2,2 );
    for(int i=3 ;i>=0;i--)
    {
            cout<;
    }
    delete [] ret;//内存释放
    cin.get();
    return 0;
}
这是那个代码 去上课了 现在才回复  不好意思啊 我试了那两个 是反着的
而且也不太懂 想看看高手的易读些的代码  谢谢
9楼2011-04-02 21:16:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见