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