個人相片
大數除法-暫存
100資專2419 張芸芸發表於2012年 05月 23日(三.) 17:17
 

/*‧ 大數 A 除 以大數 B:
1. 使 A 與 B 向左對齊。 ( 在 B 後補 0 使其位數與 A 同 )
2. 用迴圈測出最小數 N 使 ( NxB )>A 。
3. 商數即為 (N-1)x( 對齊時所補的 0) 。
4. 用迴圈依序做完餘數 ( 一開始的 B 補零後不斷
除以 10) ,直到餘數小於 B 本身為止。
5. 迴圈內所有商數相加即為所求商數。
*/

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>

void subtract(int ,int *,int *,int *,int );
void reverse(char *);
int N;

int main()
{

 char A[100],B[100];
 int A1[1000],B1[1000],C1[1000],D1[1000];
 int n,a,b,i,j;

 gets(A);//取數值
 gets(B);

 a=strlen(A);//取長度和長度差
 b=strlen(B);
 n=(strlen(A)-strlen(B));
 
 for(i=0;i<n;i++)//補零
   B[b+i+1]=0;
  
 
 for(i=0;i<a;i++)//字元轉成數
   A1[i]=A[i]-48;
 for(i=0;i<b;i++)
   B1[i]=B[i]-48;
 
 
subtract(a,A1,B1,C1,D1);
--障礙中--

 system("PAUSE");
 return 0;
}

void  reverse(char*s1)
{
     int n;
     int i;
     int temp;
    
     n = strlen(s1);
     for (i=0; i<n/2; i++)
     {
        temp = s1[i];
        s1[i]=s1[n-i-1];
        s1[n-i-1]=temp;
     }
    
   
     return;
}

--障礙中--void subtract(int N,int *a,int *b,int *c,int d)//d是商1
 {
     int i,borrow;
     d=0;
     for(i=n;i>=0;i--)
      {
       borrow=0;
       if(a[n]>=b[n])
        {
         c[i]=a[n]-b[n]
         d=d+1;  
         }   
       else
         {                       
         c[i]=c[i]+10;
         c[i]=c[i]+a[n]-b[n];
                
          d=d+1
        }        
        c[i]=c[i]a[n]-b[n]-borrow
       }
      
      }
}