標籤:c++ namespace sam ++ enter out using esc 轉換
1813. M進位數問題Constraints
Time Limit: 1 secs, Memory Limit: 32 MB
Description
試用 C++的類來表示一般進位數。
給定 2 個n位m進位整數A和B,計算m進位數整數P = A / B (向下取整)與 Q = A % B的值。
Input
輸入包含多個測試點。第一行為一個整數T,表示測試點數。
對於每個測試點第 1 行是進位 m 。第 2 行和第 3 行分別給出 m 進位整數 A 和 B。
所有 m 進位數的10進位表示均不超出int範圍。
Output
對於每個測試點,第一行輸出 m 進位數整數 P = A / B 的值,第二行輸出 Q = A % B 的值。
Sample Input
11629FA57
Sample Output
5FF30
/************************************************************************************************************
#include<iostream>
using namespace std;
int map(char s){
return s-‘A‘+10;
}
void change(int n, int p){
int s[65];
int c;
int m=0;;
if(n==0) cout<<0;
while (n!=0)//數制轉換,結果存入數組s[m]
{
c=n%p;
n=n/p;
m++;s[m]=c; //將餘數按順序存入數組s[m]中
}
for(int k=m;k>=1;k--)//輸出轉換後的序列
{
if(s[k]>=10) //若為十六進位等則輸出相對應的字母
cout<<(char)(s[k]+55);
else //否則直接輸出數字
cout<<s[k];
}
cout<<endl;
}
int main(){
int n;
cin>>n;
while(n--){
int a;
cin>>a;
string s,ss;
int c=0;
cin>>s>>ss;
for(int i=0;i<s.length();i++){
if(s[i]>=‘0‘&&s[i]<=‘9‘){
c = a*c + (s[i]-‘0‘);
}
else{
c = a*c + map(s[i]);
}
//cout<<c<<"#####"<<endl;
}
int cc=0;
for(int i=0;i<ss.length();i++){
if(s[i]>=‘0‘&&ss[i]<=‘9‘){
cc = cc*a + (ss[i]-‘0‘);
}
else{
cc = cc*a + map(ss[i]);
}
//cout<<cc<<"******"<<endl;
}
int t = c/cc;
int p = c%cc;
//cout<<"t="<<t<<endl;
//cout<<"p="<<p<<endl;
change(t,a);
change(p,a);
}
return 0;
}
1813. M進位數問題