大数相乘

   这几天在用MFC做一个计算器的时候,在同学的提醒下,做50位的数相乘。
  在一般情况下,int型后者其他的基本类型不能做到随便多少位数的相乘。
  但是,借助于数组,我发现可以很方便的实现随便多少位的数字相乘。。
   下面是我的代码。。。在代码中,我没有删掉那些调试的代码或者错误的代码(都被注释了),以提醒自己或者对这个感兴趣的人在哪里可能会出现错误。。
  
#include <iostream>
#include <stdlib.h>
using namespace std;

void main()
{
    char a[50],b[50];//设置保存输入的数据为字符型...便于输入处理
    int c[100];             //保存每次的结果...
    //int a1[50],b1[50],c1[100];
    memset(a,0,50);     //a的进行初始化
    memset(b,0,50);        //a的进行初始化
    memset(c,0,100);        //a的进行初始化
    
    cout<<"输入乘数与被乘数:"<<endl;
    int i = 0,j=0;    
    int leng1=0,leng2=0;//保存字符串长度
    //for(i=0;i<50;i++)
// {
        cin>>a;
  leng1=strlen(a);
        cin>>b;
        leng2=strlen(b);
        a[leng1]='\0';
  b[leng2]='\0';
     cout<<endl;
        
     for(i=0;i<leng1;i++)//对a字符串输入的字符进行对应的处理
     {
            a[i]=a[i]-48;
     }

     for(i=0;i<leng2;i++)//对b字符串输入的字符进行对应的处理
     {
            b[i]=b[i]-48;
     }

     for(i=0;i<leng1;i++)    //这个循环是计算的核心...将对应位相乘
     {
        for(j=0;j<leng2;j++)
        {
         c[i+j]=c[i+j]+a[j]*b[i];
        // printf("%d    ",c[i+j]);
        }
     }
        
    // printf("\n");
     //for(i=0;i<=leng1+leng2-2;i++)
    // {
     //     printf("%d    ",c[i]);
    // }
        
     printf("\n");
     for(i=leng1+leng2-2;i>0;i--)//将每一位的进位进到下一位中
     {
         c[i-1]=c[i-1]+c[i]/10;
    c[i]=c[i]%10;
     }
        
     int head=0;//对第一个数字进行处理
     head=c[0]/10;
     c[0]=c[0]%10;
     //for(i=0;i<=leng1+leng2-1;i++)
     //{
        // c[i]=c[i]-48;
     //}
     printf("%d",head);//输出第一个
     for(i=0;i<=leng1+leng2-2;i++)//输出后面所有的数字
     {
            printf("%d",c[i]);
     }
        
     printf("\n");
     system("pause");
}
下面我123456789*123456789做一个测试的结果。。第一个0我没有做处理。有兴趣的人可以自己把它处理下

你可能感兴趣的:(C++,c,休闲,大数,相乘)