數列中不含1,將含有1的數字全部去掉(管理員不喜歡1,1排序問題)

問題描述,管理員是單身狗,在給一段數列排序時,見到含有1就不爽,所以逢1就進位

樣例:

1 2 3 4 5 6 7 8 9 10 11 12  。。。。。。 100 101 102 103 104

管理員的記錄:

若含有0情況

0 2 3 4 5 6 7 8 9 20  22 23 24 。。。。 99 200 202

輸入:1

輸出:2

輸入:11

輸出:23

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

char str[1000];//輸入字符串
int start[1000],ans[1000],res[1000]; //被除數,商,餘數

//轉換前後的進制
const int oldBase = 10;
const int newBase = 9;

void change()
{//各個數位還原爲數字形式
        int i,len = strlen(str);
        start[0] = len;
        for(i=1;i<= len;i++)
        {
            if(str[i-1] >= '0' && str[i-1] <= '9')
            {
                start[i] = str[i-1] - '0';
            }
        } 
}

void solve()
{
        memset(res,0,sizeof(res));//餘數初始化爲空
        int y,i,j;
        //模n取餘法,(總體規律是先餘爲低位,後餘爲高位)
        while(start[0] >= 1)
        {//只要被除數仍然大於等於1,那就繼續“模2取餘”
            y=0;
            i=1;
            ans[0]=start[0];
            //
            while(i <= start[0])
            {
                y = y * oldBase + start[i];
                ans[i++] = y/newBase;
                y %= newBase; 
            }
            res[++res[0]] = y;//這一輪運算得到的餘數
            i = 1;
            //到下一輪商的起始處
            while((i<=ans[0]) && (ans[i]==0)) i++;
            //清除這一輪使用的被除數
            memset(start,0,sizeof(start));
            //本輪得到的商變爲下一輪的被除數
            for(j = i;j <= ans[0];j++)
                start[++start[0]] = ans[j]; 
            memset(ans,0,sizeof(ans)); //清除這一輪的商,爲下一輪運算做準備
                                                                } 
}

void output()
{//從高位到低位逆序輸出
        int i;
        int num[9]={0,2,3,4,5,6,7,8,9};
        for(i = res[0];i >= 1;--i)
            {  
                printf("%d",num[res[i]]);
            }
        printf("\n"); 
}

int main()
{
        scanf("%s",str);
            change();
            solve();
            output();
            return 0;
}

總結問題,個人思想,其實這是一個數的進制轉換問題,數列中只有,0,2,3,4,5,6,7,8,9也就是說只有9位,

這是一個10進制轉換到9進制問題,我們設立一個數組num[9];對應輸入0到9即可,然後問題簡化爲大數除以一位數問題!

問題就簡單了。會大數進制轉換即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章