进制转换

这是我从一本书搬来的......

算法流程是这样的:

1.先把x进制转成10进制,s[i]*x^i(i = 0..n-1)的和就是x进制在10进制下的表示。

但是在原程序中它却不是这样的形式,我也看不懂,如果记不住就朴素一点,模拟刚才的算法

2.再把10进制转成y进制,用短除法,一直取余,结果要倒着输出...

 

以下是代码:

#include <cstdio>
#include <string>
using namespace std;

string transform(int x,int y,string s){
    string res = "";
    int sum = 0;
    for (int i = 0;i<s.length();++i)
        {
            if (s[i] == '-')
                continue;
            if (s[i]>='a'&&s[i]<='z')
                s[i] = s[i]-'a'+'A'; 
            if ('0'<=s[i] && '9'>=s[i])
                sum = sum*x+s[i]-'0';
            else
                sum = sum*x+s[i]-'A'+10; 
        }
    while (sum)
        {
            char tmp = sum % y;
            sum /= y;
            if (tmp<=9)
                tmp += '0';
            else
                tmp = tmp-10+'A';
            res = tmp+res; 
        } 
    if (res.length() == 0)
        res = "0";
    if (s[0] == '-')
        res = '-'+res;
    return res;
} 


int main()
{
    int a,b;
    char t[30] = ""; 
    scanf("%d %s %d",&a,t,&b);
    printf("%s",transform(a,b,t).c_str());
} 

求轻喷......

posted @ 2015-10-14 15:17  空の芸術  阅读(197)  评论(0)    收藏  举报