.C++整數的N進位制字串表示

Unlimited q發表於2020-12-01

. 整數的N進位制字串表示
【問題描述】編寫函式itob(n,s,b),用於把整數n轉換成以b為基的字串並儲存到s中. 編寫程式,使用函式itob(n,s,b)將輸入的整數n,轉換成字串s,將s輸出.轉換後的字串從最高的非零位開始輸出。如果n為負數,則輸出的字串的第一個字元為’-’。b為大於1小於37的任意自然數值。當b=2時,輸出字元只可能是’0’和’1’;當b=16時,輸出字串中可能含有字元為’0’-’9’,’a’-’f’(字母以小寫輸出)。b還可以是其它數值。比如輸入n=33,b=17,則輸出33的17進位制值為"1g"。
【輸入形式】控制檯輸入整數n和b,其中n可以為負數。n和b以空格分隔.
【輸出形式】控制檯輸出轉化後的字串s.
【樣例輸入】5 2
【樣例輸出】101
【樣例說明】5的二進位制就是101
【評分標準】結果完全正確得20分,每個測試點4分。

#include<bits/stdc++.h>
using namespace std;
int itob(int n,int s[],int b);
int main(){
	int flag,n,len,b,s[50];//flag==0為負,flag==1為正
	cin>>n>>b;
	if(n>=0)flag=1;
	else flag=0;
	len=itob(n,s,b);
	if(flag==0){
	cout<<"-";
		for(int i=len-1;i>=0;i--)//將陣列變為正數
		 s[i]=-s[i];
	}
	for(int i=len-1;i>=0;i--){//直接反向輸出  無需倒序
		if(s[i]>=0&&s[i]<=9)cout<<s[i];
		else cout<<char(s[i]-'0'+'a');//與零的距離等於字母與a的距離
	} 
	
}
int itob(int n,int s[],int b){
	int i=0;
	while(1){
		if(n==0)break;
		s[i++]=n%b;//負數%任何非0數等於負數
		n/=b;
	}
	return i;
}

相關文章