1. 程式人生 > >整數的N進位制字串表示(c++)

整數的N進位制字串表示(c++)

【問題描述】
編寫函式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; }