題目描述
請你編一程式實現兩種不同進位制之間的資料轉換。
輸入輸出格式
輸入格式:
輸入資料共有三行,第一行是一個正整數,表示需要轉換的數的進位制n(2≤n≤16),第二行是一個n進位制數,若n>10則用大寫字母A~F表示數碼10~15,並且該n進位制數對應的十進位制的值不超過1000000000,第三行也是一個正整數,表示轉換之後的數的進位制m(2≤m≤16)。
輸出格式:
輸出僅一行,包含一個正整數,表示轉換之後的m進位制數。
輸入輸出樣例
輸入樣例#1: 複製
16 FF 2
輸出樣例#1: 複製
11111111
先把一個數轉換成十進位制
轉換的時候用乘權累加法
然後再轉換成m進位制
轉換的時候用不斷取模法(xjb扯的) :joy:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #define LL long long using namespace std; const int MAXN=1e6+10; const int mod=1e9+7; inline int read() { char c=getchar();int flag=1,x=0; while(c<'0'||c>'9') {if(c=='-') flag=-1;c=getchar();} while(c>='0'&&c<='9') x=x*10+c-48,c=getchar();return x*flag; } int n,m; char s[MAXN]; int a[MAXN],b[MAXN],tot=-1,ans=0,now=1; int out[MAXN],cnt=0; int main() { for(int i='0';i<='9';i++) a[i]=++tot,b[tot]=i; for(int i='A';i<='Z';i++) a[i]=++tot,b[tot]=i; n=read(); scanf("%s",s+1);m=read(); int ls=strlen(s+1); for(int i=ls;i>=1;i--) ans+=a[ s[i] ]*now,now=now*n; now=0; while(ans) out[++cnt]=ans%m,ans/=m; for(int i=cnt;i>=1;i--) printf("%c",b[ out[i] ]); return 0; }