nyoj 594 还是A+B 【字符串】

还是A+B

时间限制:1000 ms  |  内存限制:65535 KB

难度:1

描述

输入两个小于100的正整数A和B,输出A+B;

A,B均为每位数字对应的英文字母,结果为十进制数。

输入
A,B。
输出
A+B;
样例输入
one + two =
one + two zero =
样例输出
3
21
上传者
TC_常红立

思路:

首先因为不知道总共有多少个字符串,所以我们不能用scanf(“%s”,&a)来输入,而我们应该用gets(a)来进行输入,然后我们可以通过空格来将他们再次分割开,并且在整个过程中,我们要判断是加法运算还是减法运算,然后分过之后,我们通过一个字符串数组将分割开的字符串转化成数字存到a2数组里面,然后再用循环将需要运算的两个数计算出来就OK了!

代码:

#include <stdio.h>
#include <string.h>
char str[10][10]={"zero","one","two","three","four","five","six","seven","eight","nine"};
int main()
{
	int a,b;
	char c[50],a1[10][20],d;
	int a2[10];
	int u1,u2;
	while(gets(c))//因为字符串的个数没有雨确定,所以先用一个大一点的字符串将所有的字符串都保留下来
	{
		memset(a2,0,sizeof(a2));//记住清零
		int len=strlen(c);
		int t=0;//t用来保存每个字符串中字符的下标
		int e=0;//e用来保存字符串的个数 (从0开始,也就是每个字符串的下标)
		int flag=0;//flag用来保存是加法运算还是减法运算还是还没有出现运算符号的
		int k=0;//k用来保存加号或减号的前一个字符串的下标!
		for(int i=0;i<len;i++)//遍历所有的字符
		{
			if(c[i]!=' '&&c[i]!='='&&c[i]!='+'&&c[i]!='-')//将每个字符串通过空格分开
			{
				a1[e][t++]=c[i];
			}
			else if(c[i]==' ')//如果是空格说明这个字符串已经结束
			{
				a1[e][t]='\0';
				if(c[i-1]>='a'&&c[i-1]<='z')//如果空格前面是字母说明,要将下一个字符串的下标计算出来
				{
					e++;
					t=0;//并将字符串的首字母位置变成0;
				}
			}
			if((c[i]=='+'||c[i]=='-')&&flag==0)//判断第一个数字是否结束
			{
				k=e-1;//保存第一个数字的描述包含几个字符串(从0开始数)
				if(c[i]=='+')//加号用1表示
				    flag=1;
				else//减号用2表示
					flag=2;
			}
		}//以上循环是将各个字符串通过空格分开的过程
		for(int i=0;i<e;i++)//这个循环是将字符串转化为数字的过程
		{
			for(int j=0;j<10;j++)//每次都与这10个字符串进行比较,得出对应的数字
			{
				if(strcmp(a1[i],str[j])==0)
				{
					a2[i]=j;
				}
			}
		}
		u1=u2=0;
		int i;
		for(i=0;i<=k;i++)//计算第一个数字
		{
			u1=u1*10+a2[i];
		}
		for(;i<e;i++)//计算第二个数字
		{
			u2=u2*10+a2[i];
		}
		if(flag==1)//加法
		{
			printf("%d\n",u1+u2);
		}
		else//减法
		{
			printf("%d\n",u1-u2);
		}
	}
	return 0;
} 

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-08 13:53:20

nyoj 594 还是A+B 【字符串】的相关文章

nyoj 96 n-1位数【字符串简单题】

n-1位数 时间限制:3000 ms  |  内存限制:65535 KB 难度:1 描述 已知w是一个大于10但不大于1000000的无符号整数,若w是n(n≥2)位的整数,则求出w的后n-1位的数. 输入 第一行为M,表示测试数据组数. 接下来M行,每行包含一个测试数据. 输出 输出M行,每行为对应行的n-1位数(忽略前缀0).如果除了最高位外,其余位都为0,则输出0. 样例输入 4 1023 5923 923 1000 样例输出 23 923 23 0 来源 [rooot]原创 上传者 ro

nyoj 题目37 回文字符串

回文字符串 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如"aba".当然,我们给你的问题不会再简单到判断一个字符串是不是回文字符串.现在要求你,给你一个字符串,可在任意位置添加字符,最少再添加几个字符,可以使这个字符串成为回文字符串. 输入 第一行给出整数N(0<N<100)接下来的N行,每行一个字符串,每个字符串长度不超过1000. 输出 每行输出所需添加的最少字符数

NYOJ 73 比大小【字符串比较】

没看清题意,导致WA了两次,当相等的时候,要输出a==b,我也是醉了 比大小 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 给你两个很大的数,你能不能判断出他们两个数的大小呢? 比如123456789123456789要大于-123456 输入 每组测试数据占一行,输入两个不超过1000位的10进制整数a,b 数据保证输入的a,b没有前缀的0. 如果输入0 0表示输入结束.测试数据组数不超过10组 输出 如果a>b则输出"a>b",如果a&l

HDU oj A + B Problem II

郁闷了就相同的代码在HDUOJ上提交就是AC在NYOJ上提交就是WA字符串处理 #include<stdio.h> #include<string.h> #define N 1000 char x[N],y[N]; int a[N+1]; int main() { int g,h=0; scanf("%d",&g); while(g--) { int k1,k2,t=0,m,n,k,i,j,l; scanf("%s %s",x,y);

NYOJ 915 +-字符串

+-字符串 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述 Shiva得到了两个只有加号和减号的字符串,字串长度相同.Shiva一次可以把一个加号和它相邻的减号交换.他想知道最少需要多少次操作才能把第一个字符串变换成第二个字符串.你现在要去帮助他完成那个这个问题. 输入 多组测试数据 每组数据有两行,每行包含一个由"+"和"-"最成的字符串.每个子符串长度不超过5000. 输出 仅一个整数,输出最少需要操作的次数.如果答案不存在,输出-

NYOJ 685 查找字符串(map)

查找字符串 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 小明得到了一张写有奇怪字符串的纸,他想知道一些字符串出现了多少次,但这些字符串太多了,他想找你帮忙,你能帮他吗?输入字符包括所有小写字母.'@'.'+'. 输入 第一行包含一个整数T(T<=100).表示测试数据组数. 接下来每组数据第一行包含两个整数n,m(n,m<100000),分别表示有n个字符串,小明要问你m次. 接下来n行,每行包含一个字符串,长度不大于15. 接下来m行,每行包含一个字符串,表

NYOJ 658 字符串右移

字符串右移 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述 LZQ最近迷上了字符串,于是他有一个问题想考你,聪明的你一定知道答案.问题如下:给你一个字符串,让你对其进行向右移动K次,输出新的字符串. 输入 输入数据有多组,每组有一个字符串STR与一个数字K,表示对字符串STR向右移动K位. 输出 输出新的字符串STR1. 样例输入 abcd1234 4 sdfe123f 10 样例输出 1234abcd 3fsdfe12 AC码: #include<stdio.h>

NYOJ -37回文字符串

这道题看了好大会没有思路,上网一搜发现这么简单,但是我为什么就想不到呢,??就是求和它的逆序之后的字符串最长公共子序列,然后用总的长度减去它就行了.原因是是因为只要是在公共子序列里面,那么他就是对称的,少的那些就是需要补的 代码如下: 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 7 cons

nyoj 113 字符串替换 (string中替换函数replace()和查找函数find())

字符串替换 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 编写一个程序实现将字符串中的所有"you"替换成"we" 输入 输入包含多行数据 每行数据是一个字符串,长度不超过1000 数据以EOF结束 输出 对于输入的每一行,输出替换后的字符串 样例输入 you are what you do 样例输出 we are what we do读一行的方法:用geiline(cin,s) 1 #include <iostream>