整數的N進位制字串表示(c++)
阿新 • • 發佈:2018-11-26
【問題描述】
編寫函式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,則輸出1g。
【輸入形式】
控制檯輸入整數n和b,其中n可以為負數。n和b以空格分隔.
【輸出形式】
控制檯輸出轉化後的字串s.
【樣例輸入】
5 2
【樣例輸出】
101
程式碼:
#include <iostream>
using namespace std;
int itob(int n,char s[],int b);
int main()
{
int n, b, m;//m是自己設的一個複數的返回值
char s[1000];
cin >> n >> b;
if( b<=1 || b>=37 ) return 0;//根據題目框定b的範圍
m = itob(n,s,b);//如果函式返回1,則說明n是負數
if( m==1 ) cout << "-" << s << endl;//負數輸出
else cout << s << endl;
}
int itob(int n,char s[],int b)
{
int i=0,j,k;
bool key=0;//專門為負數設定一個開關
if(n<0) { n=-n; key=1; }//如果為負數,則開啟開關,並且取負數的相反值參與運算
do//這是整道題的核心演算法
{
j = n%b;
s[i++] = ( (j <= 9) ? j+'0' : j+'a'-10 );
}
while((n/=b) > 0);
s[i--]='\0';
for(k=0;k<i;k++,i--)//倒序
{
char temp=s[k];
s[k]=s[i];
s[i]=temp;
}
return key;
}