📄 numtran.cpp
字号:
#include "stdafx.h"
#include "stdio.h"
#include "ctype.h"
#include "string.h"
long EachWordValue[20];
unsigned long NumTran(int left,int right)
{
unsigned long result=0;
int i, j;
if(left==right)
return EachWordValue[left];
for(j=left;j<=right;j++)
if(EachWordValue[j]>=10)
break;
if(j>right)
{
for(i=left;i<=right;i++)
result= 10*result+EachWordValue[i];
return result; //five nine zero four
}
if(left==right-1)
return (EachWordValue[left] < EachWordValue[right])?
EachWordValue[left]*EachWordValue[right]:(EachWordValue[left]+EachWordValue[right]); //teenty one, two hundred
j=right;
while(EachWordValue[j]<100) //
j--;
if(j<right)
return (NumTran(left,j) + NumTran(j+1,right)); //four thousand six five four
i=right-1;
while( i>left && (EachWordValue[i]<=9 ||
EachWordValue[right] > EachWordValue[i]))
//(EachWordValue[right]-(EachWordValue[right]/EachWordValue[i])*EachWordValue[i])==0))
i--;
if(i==left)
return (NumTran(left,right-1)*EachWordValue[right]); //124万
else
return (NumTran(left,i)+NumTran(i+1,right-1)*EachWordValue[right] );
//3千2百1十
}
long OuterNumTran(char * sen)
{
char word[20],*ptrhead,*ptrtail;
int i,con=1,wordno=0;
#define MaxBitNo 32
char Bit[MaxBitNo][10]={"zero","one","two","three","four",
"five","six","seven","eight",
"nine","ten","eleven","twelve","thirteen",
"fourteen","fifteen", "sixteen","seventeen",
"eighteen","ninteen","twenty","thirty",
"fourty","fifty","sixty","seventy",
"eighty","ninty","hundred","thousand","million"};
long BitValue[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,
17,18,19,20,30,40,50,60,70,80,90,100,1000,1000000};
//translate each word in sen into corresponding value
ptrtail = sen;
while(con)
{
ptrhead = strchr(ptrtail,' ');
if(ptrhead!=NULL)
{
strncpy(word,ptrtail,ptrhead-ptrtail);
word[ptrhead-ptrtail]='\0';
}
else
{
strcpy(word,ptrtail);
con=0;
}
for(i=0;i<MaxBitNo;i++)
{
if(strcmp(word,Bit[i])==0)
{
EachWordValue[wordno] = BitValue[i];
break;
}
}
if(i==MaxBitNo) //erro
return -1;
wordno++;
ptrtail = ++ptrhead;
}
//translate each word in sen into corresponding value
return NumTran(0,wordno-1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -