#3994: WA line:6


s0983573676 (BlackSpace)

學校 : 國立高雄大學
編號 : 12019
來源 : [114.40.156.80]
最後登入時間 :
2011-04-27 18:21:13
d098. Stringstream運用練習(C++) -- 說明文件出自C++ Reference | From: [111.242.143.128] | 發表日期 : 2010-07-15 20:35

我沒照它題目用那個方式寫。

這是我用自己的想法寫出來的,但是它line 6過不了也不知道為什麼,我自己的電腦類似的數字跑得出來。希望一些高手可以幫幫我~!

 char a[1000];
 while(gets(a)!='\0'){
  int start,end,max=0,count=0,tmp,carry=0;
  int num[1000][100]={0},s[1000][1],sum[100]={0};
  for(int i=0;i<strlen(a);i++){
   if(isdigit(a[i])){
    if((isspace(a[i-1]) && i>0) || (i==0 && isdigit(a[i]))){
     start=i;
     for(int j=i;j<strlen(a);j++){
      if(isspace(a[j+1]) || (isdigit(a[j]) && j==strlen(a)-1)){
       for(int k=i;k<j+1;k++){
        if(isalpha(a[k])){
         end=0;
         start=0;
         i=j+1;
         break;
        }
         
       }
       if(end==0 && start==0)
        break;
       else{
        end=j;
        break;
       }
      }
     }
     for(int k=start;k<=end;k++){
      if(start==0 && end==0){
       num[count][k-start]=0;
       s[count][0]=1;
      }
      else{
       num[count][k-start]=a[k]-48;
       s[count][0]=end-start+1;
      }
     }
     count++;
    } 
   }
   if((!isdigit(a[i])&&!isdigit(a[i+1])) && i==strlen(a)-1)
    printf("0");
  }
  for(int i=0;i<count;i++){
   if(s[i][0]>max)
    max=s[i][0];
  }
  for(int i=0;i<count;i++){
   for(int j=max;j>=0;j--){
    num[i][j]=num[i][j-max+s[i][0]-1];
    if(j-max+s[i][0]-1==0){
     tmp=j;
    }
   }
   for(int k=tmp-1;k>=0;k--){
    num[i][k]=0;
   }
  }
  for(int i=max;i>=0;i--){
   for(int j=0;j<count;j++){
    sum[i]+=num[j][i];    
    }
   sum[i]+=carry;
   if(sum[i]<10)
    carry=0;
   else{
    sum[i]=sum[i]-10;
    carry=1;
   }
  }
  if(sum[0]!=0){
   for(int i=0;i<=max;i++){   
   printf("%d",sum[i]);
   }
  }
  else{
   for(int i=1;i<=max;i++){   
   printf("%d",sum[i]);
   }
  }
  printf("\n");
 }
 return 0;

我的想法是先把輸入的字串數字取出來,然後對齊在加起來,可是就是過不了line6,希望有人可以幫幫忙

 
ZeroJudge Forum