91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

編程實現excle的行列命名與另一種表示方式的相互轉換

發布時間:2020-04-01 08:55:35 來源:網絡 閱讀:856 作者:程紅玲OOO 欄目:編程語言

小B最近對電子表格產生了濃厚的興趣,她覺得電子表格很神奇,功能遠比她想象的強大。她正在研究的是單元格的坐標編號,她發現表格單元一般是按列編號的,第1列編號為A,第2列為B,以此類推,第26列為Z。之后是兩位字符編號的,第27列編號為AA,第28列為AB,第52列編號為AZ。之后則是三位、四位、五位……字母編號的,規則類似。


表格單元所在的行則是按數值從1開始編號的,表格單元名稱則是其列編號和行編號的組合,如單元格BB22代表的單元格為54列中第22行的單元格。


小B感興趣的是,編號系統有時也可以采用RxCy的規則,其中x和y為數值,表示單元格位于第x行的有第y列。上述例子中的單元格采用這種編碼體系時的名稱為R22C54。


小B希望快速實現兩種表示之間的轉換,請你幫忙設計程序將一種方式表示的坐標轉換為另一種方式。



輸入的第一行為一個正整數T,表示有T組測試數據(1<=T<=10^5)。隨后的T行中,每行為一組測試數據,為一種形式表示的單元格坐標。保證所有的坐標都是正確的,且所有行列坐標值均不超過10^6。


對每組測試數據,單獨輸出一行,為單元格坐標的另一種表示形式。


2

R23C55

BC23


BC23

R23C55


分析:因為所有行列坐標值均不超過10^6      XXXXX999999  最多12個字符(5+6+1)可以存下



代碼實現:

test.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>

char * my_itoa(int value,char *str)//模擬實現itoa(整數轉換成字符串)
{
    int i=0;
    while(value!=0){
        str[i++]=value%10+'0';
        value/=10;
    }   
    int start=0;
    int end=i-1;
    while(start<end){
        char tmp=str[start];
        str[start]=str[end];
        str[end]=tmp;
        start++;
        end--;
    }   
    return str;
}

int my_atoi(const char *str)//模擬實現atoi(字符串轉換成數字)
{
    assert(str);

    int ret=0;
    while(*str!='\0'){
        ret*=10;
        ret+=*str-'0';
        str++;
    }
    return ret;
}

int my_pow(int x,int y)//返回x的y次方
{
    int ret=1;
    while(--y>=0){
        ret*=x;
    }
    return ret;
}

char *coord(char *a,char *b,int len)
{
    assert(a);
    int flag=0;
    if(a[0]=='R'&&a[1]>='0'&&a[1]<='9'){//maybe FrLc(R23C55形式) maybe FcLr(BC23形式)
        int i=2;
        while(a[i]!=0){
            if(a[i]=='C'){
                flag=1;
                break;
            }
            i++;
        }
    }
    if(flag==1){//must be FrLc
        int i=1;
        int k=0;
        char row[5]={0};
        while(a[i]!='C'){
            row[k++]=a[i++];
        }
        while(a[i]<='0'||a[i]>='9'){
            i++;
        }

        k=0;
        char tmp[5]={0};
        while(a[i]!=0){
            tmp[k++]=a[i++];
        }
        int col=atoi(tmp);

        int j=0;
        int ret[5]={0};
        while(col>0){
            ret[j++]=col%26;
            col/=26;
        }
        int start=0;
        int end=0;
        while(ret[end]!=0){
            end++;
        }
        end-=1;
        while(start<end){
            char val=ret[start];
            ret[start]=ret[end];
            ret[end]=val;
            start++;
            end--;
        }
        int t =0;
        memset(b,'\0',sizeof(char)*12);
        while(ret[t]!=0){
            b[t]='A'+ret[t]-1;
            t++;
        }
        strcat(b,row);
    }
    else{//must is FcLr
        int i=0;
        while(a[i]>='A'&&a[i]<='Z'){
            i++;
        }
        int j=i;
        int col=0;
        while(--j>=0){
            col+=my_pow(26,i-j-1)*(a[j]-'A'+1);
        }

        char str[12]={0};
        my_itoa(col,str);
        memset(b,'\0',sizeof(char)*12);
        b[0]='R';
        int k=1;
        while(0!=(b[k++]=a[i++]))
            ;
        k-=1;
        b[k++]='C';
        strcat(b,str);
    }
    return b;
}

int main()
{
    char a[12]={0};
    char b[12]={0};
    while(scanf("%s",a)!=EOF){

        coord(a,b,12);

        int i=0;
        while(b[i]!=0){
            printf("%c",b[i]);
            i++;
        }
        printf("\n");
    }

    return 0;
}

Makefile:

bin=test
src=test.c
cc=g++

$(bin):$(src)
    cc -o $@ $^ -g

.PHONY:clean
clean:
    rm -f $(bin)

運行結果:

編程實現excle的行列命名與另一種表示方式的相互轉換

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

芜湖县| 卓尼县| 视频| 封丘县| 城固县| 雷山县| 远安县| 烟台市| 西藏| 射洪县| 苏尼特右旗| 邻水| 济阳县| 静乐县| 四川省| 忻州市| 高密市| 镇赉县| 荣昌县| 军事| 万全县| 武陟县| 永州市| 平利县| 周至县| 库尔勒市| 积石山| 登封市| 剑川县| 吉隆县| 白水县| 洛阳市| 芜湖市| 莎车县| 仲巴县| 龙岩市| 襄汾县| 德钦县| 四平市| 曲松县| 闸北区|