都知道计算机用的是二进制,所以你要把计算机处理的速度尽量的加快,所以用二进制来算是最简单的了,因为它符合计算机的语言。
当然,不排除用正常十进制、八进制、十六进制还有各种怪异的三进制、三十二进制的东西。所以在实现代码的过程中要充分利用二进制的便利,所以要用道进制转换了。
这个是十进制转换为任意进制:
#include <iostream> using namespace std; int main() { long n; int p,c,m=0,s[100]; cin>>n; cin>>p; while (n!=0) { c=n%p; n=n/p; m++;s[m]=c; } for(int k=m;k>=1;k--) { if(s[k]>=10) cout<<(char)(s[k]+55); else cout<<s[k]; } return 0; }
说白了就是自己模拟进制的过程,所以看代码吧!
然后还有一个任意进制转换成十进制:
#include<iostream> #include<string> using namespace std; inline int transform(char c) { if(c>='0'&&c<='9') return c-'0'; else return c-'A'+10; } int main() { int n,l,ans=0; string str; cin>>n>>str; l=str.length(); for(int i=0;i<l;i++) { ans*=n; ans+=transform(str[i]); } cout<<ans; return 0; }
当然,如果能像网页上的那种计算器就好了,能把任意进制转换成任意进制。
其实想想也就出来了,很简单。
但是这里的输入输出的格式令人费解,但是标程只要两个char来存放就可以(我怎么没想到呢???),以至于用了一个十分 ** 的方法来解决这个问题:
题目描述
设字符串A$的结构为: A$='mp'
其中m 为数字串(长度<=20),而n,p 均为1 或2 位的数字串(其中所表达的内
容在2-10 之间)。
程序要求:从键盘上读入A$后(不用正确性检查),将A$中的数字串m(n 进制)
以p 进制的形式输出。
输入(diji.in)
从键盘上读入A$后(不用正确性检查),将A$中的数字串m(n 进制)以p 进制的
形式输出。
输出(digi.out)
将10 进制数48,转换为8 进制数输出
样例输入
48<10>8
样例输出
48<10>=60<8>
提示
m<=20,
2<=n,p<=20;
#include <cstdio> #include <cstring> #include <cstdlib> #include <iostream> #include <algorithm> #include <cmath> #include <string> using namespace std; char n[10086]; int k,m,mp,c[2333],b[2333],tmp,a; char cc[]= {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G'}; int main() { freopen("digi.in","r",stdin); freopen("digi.out","w",stdout); char n[10086]; int m; int sum = 0; char ul[10],ur[10]; for(int i = 0 ; ; i++) { scanf("%c",&n[i]); if(n[i] == '<') break; } /*for(int i = 0 ; ; i++) { scanf("%c",&ul[i]); if(ul[i] == '<') }*/ //scanf("%s",n); scanf ("%d",&m); //cin>>ur; /*for(int i = 0 ; i <= strlen(n) ; i++) printf("%c",n[i]);*/ for(int i = 0 ; ; i++) { scanf("%c",&ur[i]); if(ur[i] == '>') break; } //printf("%d ",m); for(int i = 0 ; i < strlen(n) - 1; i++) { if(n[i] <= '9' && n[i] >= '0') sum = sum * m + (n[i] - '0'); else sum = sum * m + (n[i] - 'A' + 10); } scanf ("%d",&mp); while (sum != 0) { c[++a] = sum % mp; sum = sum / mp; } for(int i = 0 ; i < strlen(n) - 1; i++) printf("%c",n[i]); cout<<'<'<<m<<'>'<<'='; for (int i = a ; i >= 1 ; i--) printf ("%c",cc[c[i]]); cout<<'<'<<mp<<'>'; return 0; }