现在的位置: 首页 > 综合 > 正文

大数相乘

2013年08月26日 ⁄ 综合 ⁄ 共 1295字 ⁄ 字号 评论关闭
/*
  Name: 
  Copyright: 
  Author: 
  Date: 25/08/12 19:10
  Description:
  Reference:  http://blog.csdn.net/jianzhibeihang/article/details/4948267               
*/

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define Max_Size 200
int main()
{
    int a[Max_Size] = {0};
    int b[Max_Size] = {0};        
    int i=0,j=0,k=0;
    int al=0;
    int bl=0;
    int result;
    //input the number a
    printf("please input a\n");
    while((a[al] = getchar()) != '\n')
    {
     if(a[al] >= '0' && a[al] <= '9')
              {
               a[al] = a[al] - '0';
               al++;      
              }        
              else {
               printf("intput error");
               exit(0);                       
                   }    
    }
    printf("the number a is   ");
    for(i=0;i<al;i++)   printf("%d",a[i]);
    printf("\n");
    //input the number b
    printf("please input b\n");    
    while((b[bl] = getchar()) != '\n')
    {
     if(b[bl] >= '0' && b[bl] <= '9')
              {
                       b[bl] = b[bl] - '0';
                       bl++;
              }        
              else {
               printf("intput error");
               exit(0);      
                   }    
    }
    printf("the number b is   ");
    for(i=0;i<bl;i++)   printf("%d",b[i]);
    printf("\n");  
    //reverse the array of a and b
    int at[Max_Size]={0};
    int bt[Max_Size]={0};
    int c[Max_Size*2]={0};

    for(i=0;i<al;i++)     at[i] = a[i];
    for(i=0;i<bl;i++)     bt[i] = b[i];
    memset(c,0,Max_Size*2);

    for(i=0;i<al;i++)
    {
        a[i] = at[al-i-1];                  
    }
    printf("\n");
    for(i=0;i<bl;i++)
    {
        b[i] = bt[bl-i-1];                 
    }

    //multi a and b
    if(al > bl)
          {  
                k=al;
                for(i=bl;i<k;i++) b[i]=0;
          }
    else  if(al < bl){     
                k=bl;
                for(i=al;i<k;i++) a[i]=0;
          }
    else  k=al;

    
    for(i=0;i<k;i++)
        for(j=0;j<k;j++)
        {
              c[i+j] += a[i]*b[j];           
        }
    for(i=0;i<2*k+1;i++)
    {
         c[i+1] += c[i]/10;
         c[i] = c[i] %10;                  
    }
    if(c[al+bl-1]!=0)    printf("%d",c[al+bl-1]);
    for(i=al+bl-2;i>=0;i--)
    {                           
     printf("%d",c[i]);                     
    }
    getchar();
}

抱歉!评论已关闭.