三道题

来源:互联网 发布:疑心暗鬼动作数据下载 编辑:程序博客网 时间:2024/06/07 04:46
:1:

输入一个整数,依次输出它的每位数的英文单词

代码C:
# include <stdio.h>  # define N 30 //如果要录入X个字节则 N=X    int Getchar(char A[],int min,int max);//直到用户输入的字符串长度在[min,max]之间时 函数结束 返回字符串A的长度    int Check(char A[]);  int main(){        char A[N+1],B[][6]={"zero","one","two","three","four","five","six","seven","eight","nine"};int L,i; while(1){    do{    printf("输入数字(1--%d)位:\n",N);    L=Getchar(A,1,N);    }while(Check(A));    i=0;    while(i<L)      printf("%s ",B[A[i++]]);    printf("\n");    }    return 0;    }    int Check(char A[]){int i=-1;while(A[++i])  if(A[i]>'9'||A[i]<'0')    return printf("输入有误!请重新");    else A[i]-='0';return 0;}int Getchar(char *A,int min,int max)//长度在[min,max]  <闭区间>  之间时 函数结束 返回字符串A的长度        {            int B,C;       do{                A[max]=B=C=0;            while((A[B++]=getchar())!='\n'&&B<max);            if(A[B-1]!='\n')while(getchar()!='\n'&&++C);                else A[--B]=0;         if(C||B&&B<min)           printf("您录入的字符串长度:%d字节\n只录入(%d--%d)个字节!\n",B+C,min,max);            }while(C||B<min);            return B;      }   
2:

代码C:
# include <stdio.h># define N 20void change(int *a,int *b){//交换函数        int c=*a;        *a=*b;        *b=c;    }    void paixu(int A[][N],int left,int right)//快速排序升序    {        int i=left,j=right,temp[2]={A[0][left],A[1][left]};        if(left>=right)  return;        while(i!=j)        {            while((A[0][j]<temp[0]||A[0][j]==temp[0]&&A[1][j]>=temp[1])&& i<j)j--;            while((A[0][i]>temp[0]||A[0][i]==temp[0]&&A[1][i]<=temp[1])&& i<j)i++;            if(i<j)            {                change(&A[0][i],&A[0][j]);                change(&A[1][i],&A[1][j]);            }    }    if(i!=left)    {        change(&A[0][left],&A[0][i]);        change(&A[1][left],&A[1][i]);    }        paixu(A,left,i-1);        paixu(A,i+1,right);    }  int main(){char A[N]={"\0"};int S[2][N];int B,C,i;freopen("A.txt","r",stdin);scanf("%d",&B);while(B--){ scanf("%d",&C); i=0; while(C){ A[i++]+=C&1; C=(C>>1); }}for(i=0;i<N;i++){S[1][i]=1<<i;S[0][i]=A[i];}paixu(S,0,N-1);for(i=0;i<N;i++)  if(S[0][i])  printf("%d %d\n",S[1][i],S[0][i]);return 0;} 


3:Description
完成两个8位二进制数累加运算。如果最高位有进位,则加入最后一位。
Input
输入两个8位二进制数
Output
输出二进制数累加和。
Sample Input
10001011 01111100
Sample Output
00001000

代码:
# include <stdio.h>int CF(char *C);int main(){    int a,b,c=-1,i;    char C[10]={"\0"};    scanf("%d %d",&a,&b);    sprintf(C,"%08d",a+b);    while(C[++c])C[c]-=48;//每个-48    while((i=CF(C))!=0)C[7]+=i;//每次如果最高位进位不是0 则继续循环+            for(i=0;i<8;i++)//输出      printf("%d",C[i]);      printf("\n");   return 0;}int CF(char *C){    int i=7,j=0;    for(i=7;i>0;i--)//8位       if(C[i]>1){//当前位>=2      C[i-1]+=C[i]>>1;//进位      C[i]%=2;//当前位%2      }  if(C[i]>1){//处理最高位         j=C[i]>>1;         C[i]%=2;     }     return j;}

原创粉丝点击