把给定10进制正整数转换成任意进制,并以字符串形式输出。
核心算法:对进制取余,丢弃最低位,循环
#include <stdio.h>
#include <math.h>
#include <string.h>
//10进制转任意小于10的进制
void DecToArbitrary(char *str,int n,int radix)
{
int num=0;
int i=0;
while(n!=0)
{
num+=(n%radix)*(int)pow(10.0,i);
n/=radix;
++i;
}
sprintf(str,"%d",num);
}
void StrReverse(char *str)
{
char tmp;
int len=strlen(str);
for(int i=0,j=len-1; i<=j; i++,j--)
{
tmp = str[i];
str[i] = str[j];
str[j]= tmp;
}
str[len]='\0';
}
//十进制转任意进制(小于等于36)
void DecToArbitrary2(char *str,int n,int radix)
{
int i=0;
char ch[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
while(n!=0)
{
str[i++]=ch[(n%radix)];
n/=radix;
}
StrReverse(str);
}
int main()
{
char str[100]="";
DecToArbitrary2(str,16,16);
printf("%s\n",str);
return 0;
}
2021/8/16更新:168. Excel表列名称
将对应数字转换为ABCD..../
1->A 26->Z 27->AA 52->AZ 78->BZ....
这里与10进制转16进制不同的是,这里26的结果是Z,而转16进制中是0。
https://leetcode-cn.com/problems/excel-sheet-column-title/
class Solution {
public:
string convertToTitle(int columnNumber) {
string ans = "";
string ch = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
while(columnNumber)
{
columnNumber--;
ans += ch[columnNumber%27]; // 取余数
columnNumber /= 26; // 整除
}
reverse(ans.begin(), ans.end());
return ans;
}
};