2014年9月27日星期六

[UVa] 10106 - Product

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <cstdio>
#include <cstring>
#include <iostream>

#define maxn 1000
using namespace std;

void print(int a[maxn]){
  int i=maxn-1;       // 要印的數字位置
  while(i>=0 && a[i]==0) i--; // 數字開頭的零都不印
  if(i<0)cout << '0';
  else while(i>=0) cout << a[i--]; 
}

// c = a + b;
void add(int a[maxn], int b[maxn], int c[maxn])
{
  for (int i=0; i<maxn; i++)   // 對應的位數相加
    c[i] = a[i] + b[i];
            
  for (int i=0; i<maxn-1; i++) // 一口氣進位
  {
    c[i+1] += c[i] / 10;    // 進位
    c[i] %= 10;             // 進位後餘下的數
  }
}

// c = a * b;
void mul(int a[maxn], int b[maxn], int c[maxn])
{
  for (int i=0; i<maxn; i++)
    c[i] = 0;
     
    for (int i=0; i<maxn; i++)
      for (int j=0; j<maxn; j++)
        if (i+j < maxn)
          c[i+j] += a[i] * b[j];
                    
    for (int i=0; i<maxn-1; i++) // 一口氣進位
    {
      c[i+1] += c[i] / 10;
      c[i] %= 10;
    }
}

char input[maxn]={'\0'};
int a[maxn],b[maxn],c[maxn];

int main(){
  freopen("input.txt","r",stdin);
  while(scanf("%s",input)!=EOF){
 int len = strlen(input);
    for(int i=0;i<len;i++)
   a[i]=input[len-i-1]-48;

 for(int i=0;i<maxn;i++)input[i]='\0';
 
 scanf("%s",input);
 len = strlen(input);
 for(int i=0;i<len;i++)
   b[i]=input[len-i-1]-48;
 
 mul(a,b,c);
 print(c);
    printf("\n"); 
 
 for(int i=0;i<maxn;i++)a[i]=0;
 for(int i=0;i<maxn;i++)b[i]=0;
  }
  return 0;
} 

沒有留言: