注:题目来源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;
}