NBU OJ 1260 不一样的A+B 思路 C语言

Description:

读入两个小于100的正整数A和B,计算A+B的值并输出。
需要注意的是:整数A和B的每一位数字由对应的英文单词给出。如整数34表示为three four。

Input:
         测试输入包含若干测试用例,每个测试用例占一行,格式为"A + B =",相邻两字符串有一个空格间隔。当A和B同时为0时输入结束,此时的结果不要输出。

Input Sample:
         one + two =
         three four + five six =
         zero seven + eight nine =
         zero + zero =

Output:
     对每个测试用例输出一行结果,即A+B的值,用数值形式输出。

Output Sample:

3
90
96

思路:本题主要考察字符串对应的数字转化,可以通过函数处理字符串返回数字进行处理。这样就转换成普通的A+B问题了。
仔细观察输入,在“+”之前的为A,“=”之前的为B,而且输入之间都存在空格,使用scanf("%s")处理将十分方便。


附代码如下:(个人水平能力有限,题目AC,但不知道是不是完全正确,如有错误请指出)

#include<stdio.h>
#include<string.h>
//字符串指针传入,返回对应意思的数字 
int number(char *p){
	char a[10][50]={"zero","one","two","three","four","five","six","seven","eight","nine"};
	int i=-1;
	while(strcmp(p,a[++i]));
	return i;
}

int main(){
	char ch[10000],plus[]="+",equal[]="=";
	int a,b;

    do{
	    scanf("%s",ch);
	    a=0;b=0;
	    while(strcmp(plus,ch)!=0){
	    	a=a*10+number(ch);
	    	scanf("%s",ch);
	    }//获得 A ,有曾考虑过是否可以使用do-while实现,好像也可? 
	    scanf("%s",ch);
    	while(strcmp(equal,ch)!=0){
	    	b=b*10+number(ch);
	    	scanf("%s",ch);
    	}//获得 B
	    if(a+b!=0)
	    	printf("%d\n",a+b);
    }while(a+b!=0);//多次输入 
	
	return 0;
}

 

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值