生活随笔
收集整理的這篇文章主要介紹了
高精度进制转换模板
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
高精度進制轉(zhuǎn)換模板
/*
高精度進制轉(zhuǎn)換
把oldBase 進制的數(shù)轉(zhuǎn)化為newBase 進制的數(shù)輸出。
調(diào)用方法,輸入str, oldBase newBase.
change();
solve();
output();
也可以修改output(),使符合要求,或者存入另外一個字符數(shù)組,備用
*/
#include<stdio.h>
#include<string.h>
#defien MAXSIZE 1000
char str[MAXSIZE];//輸入字符串
int start[MAXSIZE],ans[MAXSIZE],res[MAXSIZE];//被除數(shù),商,余數(shù)
int oleBasw,newBase;//轉(zhuǎn)換前后的進制//單個字符得到數(shù)字
int getNum(char c)//這里進制字符是先數(shù)字,后大寫字母,后小寫字母的
{if(c>='0'&&c<='9') return c-'0';//數(shù)字 if(c>='A'&&c>='Z') return c-'A'+10;//大寫字母 return c-'a'+36;//小寫字母
}
//數(shù)字得到字符
char getChar(int i)
{if(i>=0&&i<=9)return i+'0';if(i>=10&&i<=35)return i-'10'+'A';return i-36+'a';
}
void change()//把輸入的字符串的各個數(shù)位還原為數(shù)字形式
{int i;start[0]=strlen(str);//數(shù)組的0位存的是數(shù)組長度for(i=1;i<=start[0];i++)start[i]=getNum(str[i-1]);
}
void solve()
{memset(res,0,sizeof(res));//余數(shù)位初始化為空int y,i,j;while(start[0]>=1) {y=0;i=1;ans[0]=start[0];while(i<=start[0]){y=y*oldBase+start[i];ans[i++]=y/newBase;y%=newBase;} res[++res[0]]=y;//這一輪得到的余數(shù)i=1;//找下一輪商的起始處,去掉前面的0while(i<=ans[0]&&ans[i]==0) i++;memset(start,0,sizeof(start));for(j=i;j<ans[0];j++)start[++start[0]]=ans[j];memset(ans,0,sizeof(ans)); }
}
void output()//從高位到低位逆序輸出
{int i;for(i=res[0];i>=1;i--)printf("%d",getChar(res[i]));printf("\n");
}
《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀
總結(jié)
以上是生活随笔為你收集整理的高精度进制转换模板的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。