程序代码如下,它的功能是“用英文单词模拟数学运算”读入两个小于 100 的正整数 A和 B,计算 A B 。需要注意的是: A和 B的每一位数字由对 应的英文单词给出 ,具体的输入出格式规定如下 。
输入格式:one two =
输出格式:three
程序代码如下,它的功能是“用英文单词模拟数学运算”读入两个小于 100 的正整数 A和 B,计算 A B 。需要注意的是: A和 B的每一位数字由对 应的英文单词给出 ,具体的输入出格式规定如下 。
输入格式:one two =
输出格式:three
(PS:如果有人可以重新帮我写一份并加上解释我会额外重谢!)#include
#include
#include char num[10][6] = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };int parse(char * input)
{
int i = 0;
int match = 0;
for (i = 0; i data = data;
x->next = root;
root = x;
}int stack_pop(int * data)
{
struct TStack * x = root;
if (!x)
return 0;
root = x->next ;
*data = x->data ;
free(x);
return 1;
}int SumFromStack(void)
{
int x = 0, y = 0, z = 0, sum = 0;
int tens[] = {1, 10, 100,1000,10000};
do
{
x = stack_pop(&y);
if (x == 0) break;
sum = y * tens[z ];
}
while(z < 5);
return sum;
}void print(int C)
{
char str[256]=" "; size_t i = 0;
sprintf(str, "%d", C);
for (i = 0; i < strlen(str); i )
printf("%s ", num[str[i] - '0']);
printf("
");
}
int main(void)
{
char str[256] = " "; int A = 0, B = 0, x = 0;
do
{
A = 0; B = 0; root = 0; x = 0;
for( ; ; )
{
str[0] = 0;
scanf("%s", str);
x = parse(str);
if (x < 0 )
{
if (str[0] == ' ') A = SumFromStack();
if (str[0] == '=')
{
B = SumFromStack();
break;
}
}
else
{
stack_push(x);
}
}
if (A || B) print(A B);
}
while(A || B);
system("pause");
return 0;
展开
全部