NOJ [1126] Bull Math

大数相乘,用数组模拟,我调试了好久,,,发火

//模拟大数相乘
//把两个数存在数组里
#include<stdio.h>
#include<string.h>
#define maxn 101
char  a[50],b[50];
int temp[105][105],ans[105];
int lena,lenb;
int cnt=0;
int t;
void mulit(char c)
{
  int i,j,next=0;
  i=lena-1;
  j=t;
  while(i>=0)
  {
    temp[cnt][j]=next+(c-'0')*(a[i]-'0');
    if(temp[cnt][j]>=10)
    {
   	  if(i>=1)
   	  {
  	   	next=temp[cnt][j]/10;
        temp[cnt][j]%=10;
      }
      else if(i==0)
      {
   		temp[cnt][j-1]=temp[cnt][j]/10;
   		temp[cnt][j]%=10;
   		j--;
   		break;
   	  }
    }
    else
      next=0;
    j--;
    i--;
  }
}

void add()
{
  for (int i = maxn;i>=0; i--)
  {
    for(int j=0;j<cnt;j++)
      ans[i]+=temp[j][i];
    if(ans[i]>=10)
    {
       ans[i-1]+=ans[i]/10;
       ans[i]%=10;
    }
  }
}

void print()
{
  int i,j;
  for (i = 0; i <=maxn; ++i)
    if(ans[i])
      break;
  if(i>maxn)
    printf("0\n");
  else
  {
  	for(j=i;j<=maxn;j++)
    printf("%d",ans[j]);
  printf("\n");
  }
  
}

int main()
{
  while(~scanf("%s%s",a,b))
  {
    lena=strlen(a);
    lenb=strlen(b);
    memset(temp,0,sizeof(temp));
    memset(ans,0,sizeof(ans));
    cnt=0;
    t=maxn;
    for (int i = lenb-1;i>=0 ;i--)
    {
      mulit(b[i]);
      t--;
      cnt++;
    }
    add();
    print();
  }
  return 0;
}

大数其实不难,这是一定要掌握的

你可能感兴趣的:(NOJ [1126] Bull Math)