构建此程序以了解所有huiwen数字从1到256
喜欢11 ^ 2 = 121所以11是huiwen。
实际上我有一个很好的一个 但我很困惑为什么这个项目不能很好地运作。#include<stdio.h>
int is_huiwen(int l)
{
//DON'T WORK?WHY?
int number[20]={0};
int i,j,k;
int f=l*l;
for(j=0;f;j++)
{
number[j]=f%10;
f/=10;
}
for(k=0;j-k>0;k++,j--)
{
if(number[j]!=number[k] )
{
return 0;
}
}
return 1;
/* this is ok
int y=0;
int t = l*l;
int x = t;
do
{
y=y*10+t%10;
t /= 10;
}
while(t);
if(x==y)
return 1;
else
return 0;
*/
}
int main()
{
int i;
int flag;
for(i=0;i<256;i++)
{
flag=is_huiwen(i);
if(flag)
{
printf("%d is huiwen",i);
}
else
{
printf("\n");
}
}
printf("end\n\n\n\n");
return 0;
}
端。
答案 0 :(得分:0)
错误是BluePixy指出的if( number[j] != number[k] )
行。
更正为if( number[j-1] != number[k] )
我想指出代码隐藏了这个问题的部分原因是一个字母的变量名称和不一致的命名。
以下是我用来查找相同解决方案的代码
int is_huiwen_2(int L )
{
int ret = 1;
int j = 0;
int k = 0;
int t = L * L;
int number[8] = { 0 };
for( j = 0; t; j++)
{
number[j] = t % 10;
t /= 10;
}
for( k = 0; (j - k) > 0 && ret; k++, j-- )
{
if( number[j-1] != number[k] )
{
ret = 0;
}
}
return( ret );
}
int is_huiwen_1( int L )
{
int ret = 1;
int y = 0;
int t = L * L;
int x = t;
do
{
y = y * 10 + t % 10;
t /= 10;
}
while( t );
if( x != y )
{
ret = 0;
}
return( ret );
}
int main()
{
int i = 0;
int flag = 0;
for( i = 0; i < 256; i++)
{
flag = is_huiwen_1(i);
if(flag)
{
printf("1: %d is huiwen\n",i);
}
}
for( i = 0; i < 256; i++)
{
flag = is_huiwen_2(i);
if(flag)
{
printf("2: %d is huiwen\n",i);
}
}
printf("end\n");
return( 0 );
}
我不知道所有变量的作用。在某些编辑中,'l'的使用看起来像'1'。
作为一名代码重构僧侣或狂热者,我做了一些修改,例如将代码减少到一个一致的返回条件,值和返回点。
虽然看起来过于简单,但在一行上有多个声明会隐藏麻烦,例如int i
没有在第二个函数中使用。
使用int numbers[20] = { 0 };
也误导了我们,因为[20]
这里的值范围过大,解释了值“12321”,“1234321”的范围可能意味着更容易调试这段代码。对结果应该是什么样子的简单评论可以解决几个问题。
// A Huiwen number looks like this "12321", "1589851"
虽然这可能是一个简单的练习,但如果这不是一项微不足道的练习,它预示着更大的问题。尽量不要让下一个编码器变得困难。
请记录您的算法,算术和变量。