Problem Description
读入两个小于100的正整数A和B,计算A+B,需要注意的是:A和B的每一位数字由对应的英文单词给出
Input
测试输入包含若干测试用例,每个测试用例占一行,格式为"A
+ B =",相邻两字符串有一个空格间隔.当A和B同时为0时输入结束,相应的结果不要输出.
Output
对每个测试用例输出1行,即A+B的值.
这题没有什么算法,纯粹是字符串的操作。
总体而言本题有两类做法:1、用scanf读取,因为每个字符后面都有空格,读取完每组字符串后判断此字符串的含义。2、gets一次读取一整行,直接判断至结尾。
其实这题用scanf更容易些,不过一开始想复杂了用了gets,代码如下:
#include<stdio.h>
#include <string.h>
int n10(int n,int len)
{
int i;
for(i=1;i<len;i++)
{
n=n*10;
}
return n;
}
int main()
{
char a[10000],temp[10];
char *num[10]={"zero","one","two","three","four","five","six","seven","eight","nine"};
while(gets(a))
{
int i,n=1,j=0,m,word1=0,word2=0,num1[100],num2[100],len1=0,len2=0;
for(i=0;a[i]!='+';i++)
{
if(a[i]!=' ')
{
temp[j]=a[i];
j++;
}
else
{
temp[j]='\0';
for(m=0;m<10;m++)
if(!strcmp(temp,num[m]))
{
num1[len1]=m;
len1++;
j=0;
break;
}
}
}
for(m=0;m<len1;m++)
{
word1=word1+n10(num1[m],len1-m);
}
i=i+2;
j=0;
for(;a[i]!='=';i++)
{
if(a[i]!=' ')
{
temp[j]=a[i];
j++;
}
else
{
temp[j]='\0';
for(m=0;m<10;m++)
if(!strcmp(temp,num[m]))
{
num2[len2]=m;
len2++;
j=0;
break;
}
}
}
for(m=0;m<len2;m++)
{
word2=word2+n10(num2[m],len2-m);
}
if(word1==0&&word2==0)return 0;
else printf("%d\n",word1+word2);
}
return 0;
}
本文介绍了一种解决特定问题的方法:如何通过解析英文描述的数字字符串并计算它们的和。利用C语言实现了一个程序,该程序能够读取形如“one two three”等英文描述的数字,并将其转换为数值进行加法运算。
523

被折叠的 条评论
为什么被折叠?



