今天看了一下庞果网发布的编程挑战赛,我就做了一题目,结果却让我失望,没提交的上去,也不知道是网速原因还是什么,一直处于提交状态,然后我就没理它,一直耗到时间结束,但最后我发现,竟然记我一个挑战失败,好失望!关键是还没有重新挑战的机会。算了,关键是自己得到了锻炼就好!下面就共享我的算法,可能不是最优的算法,如果读者有什么好的建议或者是好的算法欢迎提出,一起交流!
题目:
以下是我做的几个版本的代码:
C语言版本代码:
#include<stdio.h>
int reverse(int x)
{
int yushu;
int res[20];
int jieguo=0;
int i=0;
if (x>0)
{
do
{
yushu=x%10;
res[i]=yushu;
x=x/10;
i++;
} while (x);
int ii=i-1;
for (int j=0;j<i;j++,--ii)
{
int r=1;
//printf("%d",res[j]);
for (int n=0;n<ii;n++)
{
r*=10;
}
jieguo+=res[j]*r;
}
return jieguo;
}
//如果是负数
else
{
int jj = 0-x;
int jieguo1=reverse(jj);
jieguo1=0-jieguo1;
return jieguo1;
}
}
int main()
{
int num;
printf("请输入数字:");
scanf("%d",&num);
printf("你输入的数字是:%d\n",num);
int n =reverse(num);
printf("转置后的数字是:%d",n);
return 0;
}
C语言另外一版本:
#include<stdio.h>
int main()
{
printf("题目1:整数取反\n");
char a[20],*p,*q;
int i,j;
p=a;
q=a;
for(i=0;i<20;i++)
{
scanf("%c",&a[i]);
if(a[i]!='\n')
{
p++;
}
else
break;
}
printf("取反后的数是:");
//如果是正数
if (*q!='-')
{
for(i;i>=0;i--)
{
printf("%c",*(--p));
}
}
//如果是负数
else
{
printf("%c",*q);
for (i;i>1;i--)
{
printf("%c",*(--p));
}
}
return 0;
}
运行结果:
C#版本代码:
#include<stdio.h>
int main()
{
printf("题目1:整数取反\n");
char a[20],*p,*q;
int i,j;
p=a;
q=a;
for(i=0;i<20;i++)
{
scanf("%c",&a[i]);
if(a[i]!='\n')
{
p++;
}
else
break;
}
printf("取反后的数是:");
//如果是正数
if (*q!='-')
{
for(i;i>=0;i--)
{
printf("%c",*(--p));
}
}
//如果是负数
else
{
printf("%c",*q);
for (i;i>1;i--)
{
printf("%c",*(--p));
}
}
return 0;
}
运行结果:
最后提供一个简易版的算法,上面的代码都太差劲了
int fun(int a)
{
int temp = 0;
while(a)
{
temp = temp*10 + a%10;
a = a / 10;
}
return temp;
}
很简单有木有,呵呵,看来算法还是很能考验一个程序员编程和思想的能力的!