用英文单词模拟数学计算我也要做这道题.但你给的答案有些地方不是很明白,不知道怎么把最后的输出结果改成用英文单词输出.能帮我修改下吗?
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/20 06:02:23
用英文单词模拟数学计算我也要做这道题.但你给的答案有些地方不是很明白,不知道怎么把最后的输出结果改成用英文单词输出.能帮我修改下吗?
用英文单词模拟数学计算
我也要做这道题.但你给的答案有些地方不是很明白,不知道怎么把最后的输出结果改成用英文单词输出.能帮我修改下吗?
用英文单词模拟数学计算我也要做这道题.但你给的答案有些地方不是很明白,不知道怎么把最后的输出结果改成用英文单词输出.能帮我修改下吗?
#include
#include
/*用于存储10个数字的英文表示,可以双向翻译*/
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 < 10; i++) {
match = strcmp(input,num[i]); /*到字典里面检查是否和输入一致*/
if (match == 0) return i; /*如果一致返回字典索引,即翻译成功*/
}
return -1;
}
/*由于人类书写习惯是数字高位在前,低位在后,所以用一个链表做的堆栈存储数字,以解决十进制数字位数问题*/
struct TStack {
int data;
struct TStack * next;
};
/*这个全局变量用于实现堆栈*/
struct TStack * root = 0;
/*数字压栈*/
void stack_push(int data)
{
/*分配栈顶*/
struct TStack * x = (struct TStack *)malloc(sizeof(struct TStack));
/*记录数据*/
x->data = data;
/*压栈操作*/
x->next = root;
root = x;
}
/*出栈操作,数据取出后以指针变量形式放到data中去,如果取出成功,返回1,返回值0表示到达栈底,无数据*/
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)
{
/*x用于检查是否到达栈底,y用于读取堆栈数据,z用于进位处理,sum用于求得累加最终的和.tens数组用于表示当前数据的10进制幂*/
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++]; /*栈顶读出数据后要乘以10进制幂,再累加到结果*/
}while(z < 5); /*最大计算到五位数*/
return sum; /*返回结果*/
}
/*同样以英文方式输出数据*/
void print(int C)
{
/*先将16进制整型数据转化为一个十进制字符串表达*/
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("\n");
}
int main(void)
{
/*主程序,str用于读取字符串,AB用于存储数据,x用于分析字符串*/
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(); /*遇到加号表示A已经输入完毕,将A从堆栈中取出并计算*/
if (str[0] == '=') { /*如果遇到等号表示B已经输入完毕,从堆栈中取出并计算B,然后结束输入操作*/
B = SumFromStack();
break;
}
}else{
/*如果就是数据就将数据压入堆栈*/
stack_push(x);
}
}
/*如果AB有一个非零则计算求和并打印英文结果*/
if (A || B) print(A + B);
/*循环直到AB皆为0*/
}while(A || B);
/*请按任意键结束程序*/
system("pause");
return 0;
}