• poj2105---用指针对数组分块操作


    
    
    #include <stdio.h>
    #include <stdlib.h>
    int count=1;
    int pow1(int a,int b)
    {
        int pro=1,i;
        if(b==0)
            return 1;
        for(i=0;i<b;i++)
        {
            pro*=a;
        }
        return pro;
    }
    void trans(int *p1)//每次传进一个地址,调用一次这个函数,就算出这一块的10进制值,并直接输出
    {
        int sum=0,i;
        p1--;
        for(i=0;i<8;i++)//sum=0,在第一次就已经获取了最右位的值
        //注意i从0开始,不仅在次数上,与从右向左2的指数从0开始
        //总结:这种8位一块的不易去判断数组的访问会不会出错,就用简单的例子去找规律
        {
            sum += *p1 * pow1(2,i);
            p1--;
        }//当循环出去的时候,p1实际上指向了这一块的前一个元素
        printf("%d",sum);
        //不是所有数后面都加点
        if(count++ <4)
            printf(".");
    }
    
    int main()
    {
        int arr[32],n,i;
        char arr1[33];
        scanf("%d",&n);
        while(n--)
        {
            count=1;
            scanf("%s",arr1);
            for(i=0;i<32;i++)//对于输入,不可能将大数直接存进一个数,即使刚好能存进,也不便访问,所以用字符串先存
            {                           //再转换为int数组里的每一个元素
                arr[i]=arr1[i]-'0';
            }
            for(i=1;i<=4;i++)
                trans(arr+i*8);//arr+i*8这个是表示数组元素地址的常用形式
            printf("
    ");
        }
        return 0;
    }

    题意:一个32位的串被分成4部分,每部分8位,将这8位二进制转换为十进制,就要转换4次

    arr+8*1指向第二块的首元素,如果是4块,最后一次指针应该指向没有的第五块首元素地址

  • 相关阅读:
    线性回归问题
    聚类:层次聚类
    聚类:(K-means)算法
    神经网络算法
    AutoEventWireup解释
    asp.net中runat="server"的含义
    十步完全理解SQL
    sqlserver中分区函数 partition by的用法
    被忽略却很有用的html标签
    net中使用母版页
  • 原文地址:https://www.cnblogs.com/gabygoole/p/4538232.html
Copyright © 2020-2023  润新知