算法学习笔记一:中南大学复试a+b

版权声明:转载请说明出处 https://blog.csdn.net/qq_34448101/article/details/87902568

题目描述
读入两个小于100的正整数A和B,计算A+B,注意: A+B的每一位由对应的英文字母给出。
输入
测试输入包含若干测试用例,每个测试用例占一行,格式为"A + B =",相邻两字符串有一个空格间隔.当A和B同时为zero时输入结束,相应的结果不要输出.
输出
对每个测试用例输出1行,即A+B的值.
样例输入
one + two =
three four + five six =
zero + zero =
样例输出
3
90

第一种菜鸟愚蠢方法:

#include<iostream> 
#include<string.h>
//#include<string>
using namespace std;
int change(char str[100])
{
	int a=0,b=0,i,j=0,flag=0;
	char st[100]=" ",s[100]=" ";
	for(i=0;str[i]!='\0';i++)
	{	
		if(str[i]!=' ')
		{
			st[j]=str[i];
			j++;
		}
		if(str[i]==' '||str[i+1]=='\0')
		{
			if(strcmp(st,"zero")==0)
				a=0;
			if(strcmp(st,"one")==0)
				a=1;
			if(strcmp(st,"two")==0)
				a=2;
			if(strcmp(st,"three")==0)
				a=3;
			if(strcmp(st,"four")==0)
				a=4;
			if(strcmp(st,"five")==0)
				a=5;
			if(strcmp(st,"six")==0)
				a=6;
			if(strcmp(st,"seven")==0)
				a=7;
			if(strcmp(st,"eight")==0)
				a=8;
			if(strcmp(st,"nine")==0)
				a=9;
			if(str[i]==' ')
			{
				memset(st,0,sizeof(st));
				flag=1;
				j=0;
			}
		}
		if(flag==1)
		{
			b=a*10;
			flag=0;
		}
	}
	if(b!=0)
	{
		return b+a;
	}
	return a;			
}
int main()
{
	char str[100],str1[100],str2[100];
	while(gets(str))//gets用于字符串数组 
	{
		int i,j=0,k=0,flag=0,a=0,b=0; 
		for(i=0;str[i]!='=';i++)
		{
			if(str[i]=='+')
			{
				flag=1;
				i++;
				continue;
			}
			if(str[i+1]!='+'&&flag==0)
			{
				str1[j]=str[i];
				j++;
			}
			if(str[i+1]!='='&&flag==1)
			{
				str2[k]=str[i];
				k++;
			}	
		}
		str1[j]='\0';
		str2[k]='\0';
		a=change(str1);
		b=change(str2);
		if(a==0&&b==0)
			break;
		cout<<a+b<<"\n";
	}
	return 0;
}

高手版:from @qwn3213 https://zhidao.baidu.com/question/2076303904597495548.html

#include <iostream>
#include <string>
#include <cstdio>
using namespace std;
//By:@qwn3213
//2015.09.02
string str[]={"zero","one","two","three","four","five","six","seven","eight","nine"};
int input()
{
    string a;
    int s1=0;
    while(cin>>a)//cin输入时会以空格结束。所以根据此题输入示例就可以用“+,=”结束输入。 
    {
        if(a=="+"||a=="=")
            break;
        for(int i=0;i<10;i++)
            if(a==str[i])
            {
                s1=s1*10+i; 
                break;
            }
    }
    return s1;
}
void output(int x)
{
   char s[20];
   sprintf(s,"%d",x);//sprintf(s,"%d",x)此处是把整数x放入字符串s中。
   for(int i=0;s[i]!=0;i++)
       cout<<str[s[i]-'0']<<" ";//s[i]-'0'是把字符型的数字改为整形。 
   cout<<endl;
}
int main()
{
    int a,b;
    while(1)
    {
        a=input();
        b=input();
        if(a==0&&b==0)
            return 0;
        output(a+b);
    }
    return 0;
}在这里插入代码片

猜你喜欢

转载自blog.csdn.net/qq_34448101/article/details/87902568