注册 登录
编程论坛 C++教室

大数相乘问题

fl8962 发布于 2014-03-28 06:18, 383 次点击
之前看有人求助关于100的阶乘的代码,当时没考虑那么多,以为用一个Long 型的变量就够了。今天想起来了,写了一个大数相乘的代码,
运行起来貌似没什么错,百度了下相关的代码,发现其他人写的都比我这个长很多。我贴出来大家看看,看看有什么问题。
#include<iostream>
#include<string>
#include<string.h>
#include<malloc.h>
using namespace std;
int *mutiply(char *a,char *b)
{
   int m,n;
   m=strlen(a);//得到输入数字的长度
   n=strlen(b);//得到第二个数字的长度
   int *c=(int *)malloc(sizeof(int)*(m+n));//开辟一个足够存储乘积长度的数组
   int temp=0;//用来存储进位
   for(int i=0;i<=m-1;++i)
   { for(int j=0;j<=n-1;++j)
    {
      c[m+n-i-j-1]=c[m+n-i-j-1]+((a[m-i-1]-'0')*(b[n-j-1]-'0'))+temp;
      if(c[m+n-i-j-1]>9)
        {
          temp=c[m+n-i-j-1]/10;
          c[m+n-i-j-1]=c[m+n-i-j-1]%10;
         }
      else
      temp=0;
    }
  }
    for(int i=1;i<(m+n);++i)
    {
       cout<<c[i];
    }
   cout<<endl;
   return c;
}
int main()
{
    char a[100000];
    char b[100000];
    cout<<"input the first big number!!!"<<endl;
    cin>>a;
    cout<<"input the second big number!!!"<<endl;
    cin>>b;
    cout<<"the answer is:";
    mutiply(a,b);
    return 0;
}
4 回复
#2
wp2319572014-03-28 06:45
原理呢?
我的想法是手工模拟  涉及到一是从后向前算 还有累加
我没看到你有这些啊
#3
fl89622014-03-28 07:20
回复 2楼 wp231957
差不多也是自己先模拟小一点的数,然后各位相乘,如果大于九则取余,然后取整进位。
#4
wp2319572014-03-28 08:13
我算的是这样的  比你的那个麻烦多了

程序代码:


              123456789
*             987654321
-----------------------
              123456789
             246913578
            370370367
           493827156
          617283945
         740740734
        864197523
       987654312
+    1111111101
-----------------------
=    121932631112635269
#5
天使梦魔2014-03-28 14:46
不是都用bit做的么?不是都在用位运算么?.................
1