进制转换: 对于P进制x转换为Q进制首先将P进制数x转换为十进制y特别注意:当原数转化为10进制时是否超出int或long long的存储范围int y=0,product=1; while(x!=0){ y=y+(x%10)*product; x/=10; product*=P; } 再将十进制数y转换为Q进制zint z[40],num=0; do{ z[num++]=y%Q; y/=Q; }while(y!=0) //使用do while而不是while是因为如果y=0,则while会直接退出 例题:D进制的A+B描述: 输入两个非负十进制整数A和B(<2^30-1)以及D(1 #include using namespace std; int main(){ int a,b,d,sum; cin>>a>>b>>d; //读入十进制数和进制 sum=a+b; vector ve; do{ ve.push_back(sum%d); //将余数不断放入容器 sum/=d; }while(sum!=0); for(int i=ve.size()-1;i>=0;i--){ //逆序输出容器内容 cout< #include using namespace std; int main(){ string str; //存放输入大整数 int num1[30]; //存放大整数整型各位 vector a; //存放余数(结果二进制数) while(cin>>str){ //不断输入 int len=str.size(); for(int i=0;i=0;j--){ //逆序输出 cout< #include #include #include using namespace std; int main(){ int jz1,jz2; //jz1原进制,jz2转化后进制 string str; //原数按字符串读入 cin>>jz1>>str>>jz2; //将原jz1数转化为十进制数sum。按数学方法转化 long long sum=0; for(int i=0;i a; do{ a.push_back(sum%jz2); sum/=jz2; }while(sum!=0); //根据不同进制,大于十进制和小于等于十进制的分别输出 if(jz2<=10){ for(int i=a.size()-1;i>=0;i--) cout<=0;i--){ if(a[i]>=10) cout<<(char)(a[i]-10+'A'); //将int型数据转化为ASCII码,输出对应字符 else cout<<(a[i]); } } return 0; } 3. 问题描述 给定n个十六进制正整数,输出它们对应的八进制数。 输入格式 输入的第一行为一个正整数n (1<=n<=10)。 接下来n行,每行一个,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。【注意】 输入的十六进制数不会有前导0,比如012A。 输出的八进制数也不能有前导0。样例输入 2 39 123ABC样例输出 71 4435274特别注意:由于16进制数可能很长,故不能使用先转化为10进制,再转化为8进制的思路,无法存储如此长度整数,只能用字符串 #include #include using namespace std; int main(){ int n; cin>>n; string a[n]; //将各16进制数放入字符串数组中 for(int i=0;i>a[i]; } for(int i=0;i