程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> poj1220 (高精度任意進制轉換)

poj1220 (高精度任意進制轉換)

編輯:C++入門知識

高精度任意進制轉換


代碼是從discuss裡找到的,據說是maigo神牛寫的。

超精簡!!

我自己第一寫的時候,還把n進制先轉成10進制,然後再從10進制轉為m進制。。。

悲催的是寫了好長滴,還沒調對啊!!!

Code:

 

#include <stdio.h>   
#include <string.h>   
const int maxn = 1000;  
int  t[maxn], A[maxn];  
char str1[maxn], str2[maxn];  
int n, m;  
void solve()  
{  
    int i, len, k;  
    len = strlen(str1);  
    for(i=len; i>=0; --i) t[len-1-i] = str1[i] -(str1[i]<58 ? 48: str1[i]<97 ? 55: 61);  
    for(k=0; len;) {  
        for(i=len; i>=1; --i) {  
            t[i-1] +=t[i]%m*n;  
            t[i] /= m;  
        }  
        A[k++] = t[0] % m;  
        t[0] /=m;  
        while(len>0&&!t[len-1])  len--;  
    }  
    str2[k] =NULL;  
    for(i=0; i<k; i++)  
        str2[k-1-i] = A[i]+(A[i]<10 ? 48: A[i]<36 ? 55:61);  
}  
  
int main()  
{  
    int T;  
//    freopen("in.txt","r",stdin);   
    scanf("%d",&T);  
    while(T--) {  
        scanf("%d%d%s",&n, &m, str1);  
        solve();  
        printf("%d %s\n%d %s\n\n", n, str1, m, str2);  
    }  
    return 0;  
}  

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved