NOI:8214 正整數的任意進制轉換

題目鏈接


題解:高精度計算,直接使用進制q取餘即可,無需轉換成10進制

#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string>
#include <cmath>
using namespace std;
char x[10000];
int y[10000],z[10000];
int a,b,c,e,d,n;
int chu()//除法
{
    int yu1=0,yu2=0;
    for(int i=0;i<c;i++){
        yu1=(y[i]+yu2*a)%b;
        y[i]=(y[i]+yu2*a)/b;
        yu2=yu1;
    }
    return yu1;
}
int main()
{
    scanf("%d",&n);
    while(n){
        n--;
        memset(x,0,sizeof(x));
        memset(y,0,sizeof(y));
        memset(z,0,sizeof(z));
        scanf("%d",&a);getchar();//p進制
        for(int i=0;;i++){
            scanf("%c",&x[i]);
            if(x[i]==',')
            {x[i]=0;break;}
            if(x[i]>='0'&&x[i]<='9')//轉換成int存入y
                y[i]=x[i]-'0';
            else
                y[i]=x[i]-'A'+10;
        }
        scanf("%d",&b);//q進制
        c=strlen(x);
        for(e=0,d=1;;e++,d=1){
            z[e]=chu();
            for(int i=0;i<c;i++){//y全爲0終止
                if(y[i]!=0)
                {d=0;break;}
            }
            if(d==1)
                break;
        }
        while(e>=0){//逆序輸出
            if(z[e]>=0&&z[e]<=9)
                printf("%d",z[e]);
            else
                printf("%c",z[e]-10+'A');
            e--;
        }
        printf("\n");
    }
    return 0;
}

發佈了96 篇原創文章 · 獲贊 16 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章