论坛: 编程破解 标题: 还劳286再来看看(十进制的循环移位的问题) 复制本贴地址    
作者: sniper167 [sniper167]    论坛用户   登录
循环移位,n>0向右移n位,n<0向左移n位
如15896。向右移二位,变为96158
        向左移二位,变位89615


main()
{unsigned long number;
int n;
printf("please input the number and n:\n");
scanf ("%ul,%d",&number,&n);
if (number<10)  {printf("input error!");getch();exit();}
if (n>0)  {printf("number=%d      Move rightwards of %d\n",number,n);
            right(number,n);
          }
else  {printf("number=%d      Move leftwards of %d\n",number,n);
        left(number,-n);
        }
getch();
}


void right(unsigned long value,int n)
{int k,i;
unsigned long m;
m=value;
k=1;
while(m>=10)
  {k*=10;
    m=m/10;
  }
for (i=1;i<=n;i++)
  {value=value/10+(value-value/10*10)*k;
  }
printf("Now,number=%ul\n",value);
}


void left(unsigned value,int n)
{int k,i;
unsigned long m;
k=1;
m=value;
while(m>=10)
  {k*=10;
    m=m/10;
  }
for (i=1;i<=n;i++)
  {value=(value-m*k)*10+m;
  }
  printf("Now,number=%ul\n",value);
}



错误 yiwei.c 18: 与'right'声明中的类型不匹配
错误 yiwei.c 34: 与'left'声明中的类型不匹配

想请286指点,还有没有更好的算法?怎样解决不匹配的错误?
谢谢!

地主 发表时间: 04-02-28 17:27

回复: 286 [unique]   版主   登录
unsigned long number;
if (number<10)

两句矛盾了。既然是无符号,则全是正的。


B1层 发表时间: 04-03-01 12:48

回复: 286 [unique]   版主   登录
#include <stdio.h>

void right(unsigned long value,int n);  //声明
void left(unsigned value,int n);

void main()
{
unsigned long number;
int n;
printf("please input the number and n:\n");
scanf ("%ul,%d",&number,&n);
if (number<10) 
{
printf("input error!");
getch();
exit(2);
}
if (n>0) 
{
printf("number=%d      Move rightwards of %d\n",number,n);
right(number,n);
}
else 
{
printf("number=%d      Move leftwards of %d\n",number,n);
left(number,-n);
}
getch();
}


void right(unsigned long value,int n)
{
int k,i;
unsigned long m;
m=value;
k=1;
while(m>=10)
{
k*=10;
m=m/10;
}
for (i=1;i<=n;i++)
{
value=value/10+(value-value/10*10)*k;
}
printf("Now,number=%ul\n",value);
}


void left(unsigned value,int n)
{
int k,i;
unsigned long m;
k=1;
m=value;
while(m>=10)
{
k*=10;
m=m/10;
}
for (i=1;i<=n;i++)
{
value=(value-m*k)*10+m;
}
printf("Now,number=%ul\n",value);
}


B2层 发表时间: 04-03-01 13:02

回复: sniper167 [sniper167]   论坛用户   登录
感谢万分

B3层 发表时间: 04-03-01 22:06

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号