#2440: TLE!!


failingapart (Q寶)

學校 : 臺北市立建國高級中學
編號 : 7708
來源 : [125.228.107.49]
最後登入時間 :
2009-12-16 05:32:50
a021. 大數運算 | From: [125.228.223.143] | 發表日期 : 2009-10-06 04:37

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int check(int t[500]){//判斷餘數正負  
  int i;  
  for(i=0;i<499;i++){  
    while(t[i]>=10){  
    t[i+1]++;  
    t[i]-=10;  
}  
    while(t[i]<0){  
    t[i]+=10;  
    t[i+1]--;         
}  
}
  for(i=499;t[i]==0&&i>0;i--);  
  if(t[i]<0) return 0;//代表 t<0
  else return 1;//代表 t>=0
}  
void function(int t[1000]){//進位捨位並輸出
  int i;
  for(i=0;i<999;i++){
    while(t[i]>=10){
    t[i+1]++;
    t[i]-=10;
}
    while(t[i]<0){
    t[i]+=10;
    t[i+1]--;       
}
}
  for(i=999;t[i]==0&&i>0;i--);
  if(t[i]<0){
    for(i=0;i<1000;t[i]*=-1,i++);
    printf("-");
    function(t);
}
  else{
   for(i=999;t[i]==0&&i>0;i--);
    for(;i>=0;printf("%d",t[i]),i--);
    printf("\n");
}
}

void plus(int n[500],int m[500],int len){
  int t[1000]={0};
  int i;
  for(i=0;i<len;t[i]=n[i]+m[i],i++);
  function(t);
}

void minus(int n[500],int m[500],int len){
  int t[1000]={0};
  int i;
  for(i=0;i<len;t[i]=n[i]-m[i],i++);
  function(t);
}

void cross(int n[500],int m[500],int x,int y){
  int t[1000]={0};
  int i,j;
  for(i=0;i<x;i++)
   for(j=0;j<y;t[i+j]+=n[i]*m[j],j++);
  function(t);
}

void divide(int n[500],int m[500],int x,int y){
  int t[1000]={0};
  int i,j,k;
  for(i=x-y;i>=0;i--){
   for(j=0;check(n)==1;j++){
    for(k=0;k<y;k++){
     n[k+i]-=m[k];
}
}
    t[i]=j-1;
    for(k=0;k<y;k++){
     n[k+i]+=m[k];
}
}
  function(t);
}

int main(){
    char x[500],y[500],s[1];
    while(scanf("%s %s %s",x,s,y)!=EOF){
  int n[500]={0};
  int m[500]={0};
  int len;
  for(int i=0;i<strlen(x);n[i]=x[strlen(x)-i-1]-48,i++);
  for(int i=0;i<strlen(y);m[i]=y[strlen(y)-i-1]-48,i++);
  if(strlen(x)>=strlen(y)) len=strlen(x);
  else len=strlen(y);
     if (s[0]==43) plus(n,m,len);
     else if(s[0]==45) minus(n,m,len);
     else if(s[0]==42) cross(n,m,strlen(x),strlen(y));
     else if(s[0]==47) divide(n,m,strlen(x),strlen(y));
}
return 0;
}

 

似乎跑完第一組測資就掛了

測試了很久應該沒有無窮迴圈耶...

感覺運算時間也沒有很久

不知道為什麼會tle

誰能幫幫我

 
ZeroJudge Forum