循环左{右}位移怎么实现?有具体题目问!
a是系统给定的外部整型变量(不需要自行定义),其值是一个3位十进制数。编写
程序,将a的值循环右移1位。例如,若a=123,则
移位后a=312;若a=360,则移位后a=36。
**********/
void main()
{
}
#include <stdio.h> #include <stdlib.h> #include <limits.h> int count(int); int newnumRight(int, int); int newnumLeft(int n, int num); int main(void) { int num,n,i,numnew; L: printf("INPUT NUM: "); scanf("%d", &num); if(num<0 || num>INT_MAX) { printf("INPUT ERROR!\n"); goto L; } n=count(num); printf("\n循环右移...\n"); for(i=0; i<n; i++) { numnew=newnumRight(n, num); num=numnew; printf("NEWNUM = %d\n", numnew); } printf("\n循环左移...\n"); for(i=0; i<n; i++) { numnew=newnumLeft(n, num); num=numnew; printf("NEWNUM = %d\n", numnew); } return 0; } int count(int num) { int n=0; if(num>=0 && num<=9) { n=1; } else { do { num/=10; n++; } while(num>=1); } return n; } int newnumRight(int n, int num) { int i; char *cnum; char *newcnum; cnum = malloc((n+1)*sizeof(char)); if(cnum == NULL) { printf("first malloc error... again!\n"); exit(0); } *(cnum+n)='\0'; newcnum = malloc((n+1)*sizeof(char)); if(newcnum == NULL) { printf("second malloc error... again!\n"); exit(0); } *(newcnum+n)='\0'; itoa(num,cnum,10); i=--n; for(n=0; n<i; n++) { *(newcnum+n) = *(cnum+n+1); } *(newcnum+i)=*cnum; num=atoi(newcnum); free(cnum); free(newcnum); return num; } int newnumLeft(int n, int num) { int i; char *cnum; char *newcnum; cnum = malloc((n+1)*sizeof(char)); if(cnum == NULL) { printf("first malloc error... again!\n"); exit(0); } *(cnum+n)='\0'; newcnum = malloc((n+1)*sizeof(char)); if(newcnum == NULL) { printf("second malloc error... again!\n"); exit(0); } *(newcnum+n)='\0'; itoa(num,cnum,10); i=--n; for(; n>0; n--) { *(newcnum+n) = *(cnum+n-1); } *newcnum=*(cnum+i); num=atoi(newcnum); free(cnum); free(newcnum); return num; }