#13673: C 語言 TLE求救~請問應該怎麼修正才行呢??另外(加法的測資總是莫名少2)


peterlin0112@gmail.com (林政佑)

學校 : 不指定學校
編號 : 76611
來源 : []
最後登入時間 :
2018-03-07 14:30:55
a021. 大數運算 | From: [1.163.176.243] | 發表日期 : 2018-04-05 23:05

#include <stdio.h>
#include <string.h>
#define len 300
void Dvs(char a[],char b[],char c[]){
int i;

for(i=len-1;i>=0;i--)
    if(a[i]>=b[i]&&a[i]!=0){
        Sub(a,b,c);
        Dvs(a,b,c);
        break;
    }
}

void Sub(char a[],char b[],char c[]){
int i;

for(i=0;i<len;i++)a[i]=a[i]-b[i];
for(i=0;i<len;i++)
    if(a[i]<0){
        a[i+1]-=1;//***
        a[i]=a[i]+10;
    }
c[0]+=1;
for(i=0;i<len;i++)
    if(c[i]>=10){
        c[i+1]+=c[i]/10;
        c[i]=c[i]%10;
    }
}

void Mul(char a[],char b[],char d[]){
int i,j;
for(i=0;i<len*2-1;i++)d[i]=0;
    for(i=0;i<len;i++){
        for(j=0;j<len;j++){
            d[i+j]+=a[i]*b[j];
            if(d[i+j]>=10){
                d[i+j+1]+=d[i+j]/10;
                d[i+j]=d[i+j]%10;
            }
        }
    }
}

void add(char a[],char b[],char c[]){
int i;
for(i=0;i<len;i++)c[i]=a[i]+b[i];
    for(i=0;i<len-1;i++){
        if(c[i]>=10){
            c[i+1]+=c[i]/10;
            c[i]%=10;
        }
    }
}

int Input(char n[]){
char s[len];
int i,l;
for(i=0;i<len;i++)n[i]=0;
if(scanf("%s",s)<1)return -1;
l=strlen(s);
for(i=0;i<l;i++)n[i]=s[l-i-1]-'0';
return 0;
}

void Print(char n[]){
int i;
for(i=len-1;i>0;i--)if(n[i]!=0)break;
for(;i>=0;i--)printf("%d",n[i]);
printf("\n");
}

void main(){
char s,a[len],b[len],c[len],d[len*2];
int i;

    while(1){
        if(Input(a))return;//大數
        scanf("%s",&s);// +-*/
        Input(b);//大數

        switch(s){
            case'+':{
            add(a,b,c);
            c[0]+=2;//因為測資莫名少了2...故補上+2
            Print(c);
            break;
            }
            case'-':{
            Sub(a,b,c);
            Print(a);
            break;
            }
            case'*':{
            Mul(a,b,d);
            Print(d);
            break;
            }
            case'/':{
            for(i=0;i<len;i++)c[i]=0;
            Dvs(a,b,c);
            Print(c);
            break;
            }
        }
    }
}

 
ZeroJudge Forum