Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 31 Accepted Submission(s) : 15
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
读入两个小于100的正整数A和B,计算A+B.
需要注意的是:A和B的每一位数字由对应的英文单词给出.
需要注意的是:A和B的每一位数字由对应的英文单词给出.
Input
测试输入包含若干测试用例,每个测试用例占一行,格式为"A + B =",相邻两字符串有一个空格间隔.当A和B同时为0时输入结束,相应的结果不要输出.
Output
对每个测试用例输出1行,即A+B的值.
Sample Input
one + two = three four + five six = zero seven + eight nine = zero + zero =
Sample Output
3 90 96
思路: 题目是考字符串的处理。用 gets()函数 接收每个测试案例
然后 把每个测试案例 分为a,b 字符串 。 再分别把a,b 字符串转化为 正整数 a b
需要注意的是 前导零的判断 以及 输入结束的条件
代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int fun(char ss[101])// 把字符串 转化为 int 型的函数
{
char ch[10][10];
int len,i,j,flag,num,a[10],sum,t,flag1;
len=strlen(ss);
num=flag=0;
for(i=0;i<len;i++) // 用ch[i][10] 分别存储 位数上的每个数字 (字符型)
{
if(ss[i]==' ')
{
for(j=flag;j<i;j++)
ch[num][j-flag]=ss[j];
ch[num][j-flag]='\0';
num++;
flag=i+1;
}
}
flag1=0;
for(i=0;i<num;i++) //将 字符型数字 转化为对应的 int
{
if(ch[i][0]=='o')a[flag1++]=1;
if(ch[i][0]=='t'&&ch[i][1]=='w')a[flag1++]=2;
if(ch[i][0]=='t'&&ch[i][1]=='h')a[flag1++]=3;
if(ch[i][0]=='f'&&ch[i][1]=='o')a[flag1++]=4;
if(ch[i][0]=='f'&&ch[i][1]=='i')a[flag1++]=5;
if(ch[i][0]=='s'&&ch[i][1]=='i')a[flag1++]=6;
if(ch[i][0]=='s'&&ch[i][1]=='e')a[flag1++]=7;
if(ch[i][0]=='e')a[flag1++]=8;
if(ch[i][0]=='n')a[flag1++]=9;
if(ch[i][0]=='z')a[flag1++]=0;
}
sum=0;
t=10;
for(i=0;i<flag1;i++)
sum=sum*t+a[i];
return sum;
}
int main()
{
char s[101],s1[101],s2[101];
int i,j,flag,len,x,y;
//freopen("1.txt","r",stdin);
while(1)
{
s[0]='\0';
gets(s);
len=strlen(s);
if(len==0)break;
else
{
for(i=0;i<len;i++) // 把测试案例 分成两个 字符串来 分别处理
{
if(s[i]=='+')
{
for(j=0;j<i;j++)
s1[j]=s[j];
s1[j]='\0';
flag=i;
}
if(s[i]=='=')
{
for(j=flag+1;j<i;j++)
s2[j-flag-1]=s[j];
s2[j-flag-1]='\0';
}
}
x=fun(s1);
y=fun(s2);
if(x==0&&y==0)break;
else printf("%d\n",x+y);
}
}
return 0;
}