大数を掛け合わせる

2701 ワード

/*
  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
"); while((a[al] = getchar()) != '
') { 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("
"); //input the number b printf("please input b
"); while((b[bl] = getchar()) != '
') { 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("
"); //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("
"); 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(); }