Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

为什么我的程序老通不过?一直RE/WA?我在devc++上运行正确啊 Problem 2121

Posted by NJUT_ACM_40 at 2009-04-19 11:38:09 and last updated at 2009-04-19 12:48:21
// it appears to be right in my dev c++
#include <iostream>
#include <string>

using namespace std;

char *keywords[32]={
    "zero","one","two","three","four","five","six","seven","eight","nine",//0-9
    "ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen",//10-19
    "twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety",//20-27
    "hundred","thousand","million","negative"//28-31
};

int mean(char *src)
{
    for(int i=0;i<32;++i)
    {
        if(!strcmp(src,keywords[i]))
            return(i); 
    }
    return(32);
}

void parse(char *src)
{
    char temp[15];
    char *t=temp;
    char *p=src;
    bool error=false;
    
    int result[20];//store meaned value
    int counter=0;//use for result
    
    long value=0;//temp value
    long final=0;//final value
    bool negativeflag=false;
    
    while('\0'!=*p)
    {
        if( ' '==*p )
        {//string termal
            *t='\0';
            result[counter]=mean(temp);
            t=temp;
            ++counter;
        }
        else
        {
            *t=*p;
            ++t;
        }
        ++p;
    }
    //last one
    *t='\0';
    result[counter]=mean(temp);
    t=temp;
    ++counter;
    ///////////
    for(int i=0;i<counter;++i)
    {
        if(result[i]<20)//0-19
        {
            
            value+=result[i];
        }
        else if(result[i]<28)//20,30,40,50,60,70,80,90(20-27)
        {
            value+=(result[i]-18)*10;
        }
        else if(28==result[i])//hundred
        {
            value*=100;
        }
        else if(29==result[i])//thousand.termal
        {
            value*=1000;
            final+=value;
            value=0;
        }
        else if(30==result[i])//million.termal
        {
            value*=1000000;
            final+=value;
            value=0;
        }
        else if(31==result[i])//negative
        {
            negativeflag=true;
        }
        else//parse error
        {
            error=true;
        }   
    }
    //last one:
    final+=value;
    if(negativeflag)
        final*=-1;  
    if(!error)
        cout<<final<<endl;
}

int main()
{
    char *str[100];
    int n=0;
    str[n]=new char[150];
    do
    {
        str[n]=new char[150];
        cin.getline(str[n],150);
        ++n;
    }
    while(strcmp("\0",str[n-1]));

    for(int i=0;i<(n-1);++i)
    {
        parse(str[i]);
    }
    
    //system("pause");
    
    for(int i=0;i<n;++i)
    {
            delete[] str[i];
    }
    return(0);
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator