北航计算机学院16年上机题

注:题目来源copy某个师姐博客的

第一题

题目描述 
给定一个数n,将这个数的各位顺序颠倒,称为逆序数m。 
例如1234的逆序数是4321。 
输入 
输入一个数n(0 < n<1000000000),已知输入开头不包含多余的0。 
输出 
如果m是n的k倍(k为整数),那么输出n*k=m。 
如果m不是n的整数倍,那么输出n和n的逆序数。 
样例输入 
1234 
1089 
23200 
样例输出 
1234 4321 
1089*9=9801 

23200 00232

比较简单,没有加注释了

#include <cstdio>
#include <cstdlib>
#include <cstring>

int main()
{
	char sample1[10],sample2[10];
	int tmp1,tmp2;
	int i,l;
	scanf("%s",sample1);
	l=strlen(sample1);
	for(i=0;i<l;i++)
		sample2[l-1-i]=sample1[i];
	sample2[l]='\0';
	for(i=0,tmp1=0;i<l;i++)
		tmp1=tmp1*10+sample1[i]-('1'-1);
	for(i=0,tmp2=0;i<l;i++)
		tmp2=tmp2*10+ sample2[i]-('1'-1);
	if(tmp2>tmp1)
	{
		if(tmp2%tmp1==0)
			printf("%d*%d=%d",tmp1,tmp2/tmp1,tmp2);
		else
			printf("%s",sample2);
	}
	else
	{
		if(tmp1%tmp2==0)
			printf("%d*%d=%d",tmp2,tmp1/tmp2,tmp1);
		else
			printf("%s",sample2);
	}

	return 0;
}

第二题,稍微难难一点吧,写了注释

题目描述 
给一个c语言的enum定义语句,输出enum中规定的各项值。 
输入 
输入一个c语言的enum定义语句。 
输出 
输出enum中规定的各项值。 
样例输入 
enum BOOL{true,false}; 
样例输出 
true 0 

false 1

#include <cstdio>
#include <cctype>

typedef char string[32];  


int main()
{
	string variable[32]={0};
	int value[32]={0};
	int i,j=-1,n=0,mask=0;
	int c;

	while((c=getchar())!='}') //c== '}' 说明是没有枚举内容了
	{
		if(c=='{'&&mask==0)			//‘{’出现之后说明就是变量开始声明(或者定义?)的时候了
			mask=1;
		else if(!isspace(c)&&c!='='&&c!=',')    //这里还是个有缺点的,我没有考虑变量名字不可以数字开头之类的,但是假装测试用例都是合C语言语法的。
		{
			if(mask==1)				//说明为字符串的首个字符
			{
				mask=2;			
				i=0;
				variable[++j][i++]=c;      
			}
			else if(mask==2)        //非首个字符
				variable[j][i++]=c;
		}
		else if(c=='=')          //赋值了,我们用scanf函数,直接简单
		{
			mask=3;
			scanf("%d",&n);
		}
		else if(c==',')             //一个变量声明结束了
		{
			variable[j][i]='\0';
			value[j]=n++;
			mask=1;
		}
	}
	variable[j][i]='\0';      //此处是为了‘}’之前的就后一个字符串
	value[j]=n++;

	for(i=0;i<j;i++)			//可以打印了
	{
		printf("%s %d\n",variable[i],value[i]);
	}
	printf("%s %d",variable[j],value[j]);

	return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值