c++ 进制转换
2013-09-04 01:07
246 查看
// SistemaChange.cpp
#include "stdafx.h"
#include <iostream>
using namespace std;
#include <math.h>
//M进制转N进制(16进制以内互相转换)
//翻转int
int convert(int num) {
int result = 0;
if(num == 0) {
return result;
}
int sign = num/abs(num);
num *= sign;
while(num > 0) {
int i = num % 10;
num = num / 10;
result = result * 10 + i;
}
return result * sign;
}
//A问题分解
//1.1
// 2#1011 = 1*2^0+1*2^0+1*2^2+1*2^3=11
//2进制转10进制(整数)
int TwoToTen(int s2){
int s10=0;
int weight=0;
int tmpS2=s2;
int r=0;
while(tmpS2>0){
r=tmpS2 %10;//最后一位
s10+=r*pow(2,weight);
tmpS2/=10;
weight+=1;
}
return s10;
}
//1.2
//K进制转10进制
int KToTen(int sk,int k){
int s10=0;
int weight=0;
int tmpSk=sk;
int r=0;
while(tmpSk>0){
r=tmpSk %10;//最后一位
s10+=r*pow(k,weight);
tmpSk/=10;
weight+=1;
}
return s10;
}
//2.1
//10进制转2进制
//思路:倒除
//10#13-->8+4+1 = 1011
//13/2=6 余 1
//6/2=3 余 0
//3/2=1 余 1
//1/2=0 余 1
//逆序输出
int TenToTwo(int s10){
bool flag=0;
int s2=0;
int weight=0;
int tmpS10=s10;
int p=0;//商值
int r=tmpS10%2;//余数
if(r==0){flag=1;}
while(tmpS10>0){
p=tmpS10/2;
r=tmpS10%2;
s2+=r*pow(10,weight);
tmpS10=p;
weight+=1;
}
if(!flag){
return s2;
}else{
return 10*s2;
}
}
//2.2
//10进制转k进制
int TenToK(int s10,int k){
bool flag=0;
int sk=0;
int weight=0;
int tmpS10=s10;
int p=0;//商值
int r=tmpS10%k;//余数
if(r==0){//第一个余数为0
flag=1;
}
while(tmpS10>0){
p=tmpS10/k;
r=tmpS10%k;
sk+=r*pow(10,weight);
tmpS10=p;
weight+=1;
}
//最高位是0 例如10#3-->3#10 先得到的是01
if(!flag){
return sk;
}else{
return 10*sk;
}
}
//最终K进制转M进制
//最简单:k->10->m
int KToMSimple(int sk,int k, int m){
int s10=KToTen(sk,k);
int sm=TenToK(s10,m);
return sm;
}
int main(int argc, char* argv[])
{
// printf("Hello World!\n");
//测试2->10
cout<<"2#1011-->10#"<<TwoToTen(1011)<<"\n";//11
cout<<"2#11011-->10#"<<TwoToTen(11011)<<"\n";//27
//测试2->10
cout<<"k2#1011-->10#"<<KToTen(1011,2)<<"\n";//11
cout<<"k2#11011-->10#"<<KToTen(11011,2)<<"\n";//27
//测试3->10
cout<<"k3#11-->10#"<<KToTen(11,3)<<"\n";//4
cout<<"k3#11-->10#"<<KToTen(101,3)<<"\n";//10
cout<<"k3#11011-->10#"<<KToTen(11011,3)<<"\n";//112
cout<<"k3#201-->10#"<<KToTen(201,3)<<"\n";//112
//测试10->2
cout<<"10#13-->2#"<<TenToTwo(13)<<"\n";//1011
cout<<"10#15-->2#"<<TenToTwo(15)<<"\n";//1111
//测试10->2
cout<<"10#13-->2#"<<TenToK(13,2)<<"\n";//1011
cout<<"10#15-->2#"<<TenToK(15,2)<<"\n";//1111
//测试10->3
cout<<"10#13-->3#"<<TenToK(3,3)<<"\n";//10
cout<<"10#13-->3#"<<TenToK(4,3)<<"\n";//11
cout<<"10#15-->3#"<<TenToK(10,3)<<"\n";//101
//测试k->m
cout<<"2#1011-->3#"<<KToMSimple(1011,2,3)<<"\n";//10:11 3:102 2+1*3^2=11
cout<<"2#1101-->3#"<<KToMSimple(1101,2,3)<<"\n";//10:13 3:111 1+1*3^1+1*3^2=13
cout<<"9#312-->4#"<<KToMSimple(312,9,4)<<"\n";//10:11 3:102 2+1*3^2=11
cout<<"9#312-->10#"<<KToTen(312,9)<<"\n";//10:11 3:102 2+1*3^2=11
cout<<"9#254-->4#"<<TenToK(KToTen(254,9),4)<<"\n";//10:11 3:102 2+1*3^2=11
return 0;
}
#include "stdafx.h"
#include <iostream>
using namespace std;
#include <math.h>
//M进制转N进制(16进制以内互相转换)
//翻转int
int convert(int num) {
int result = 0;
if(num == 0) {
return result;
}
int sign = num/abs(num);
num *= sign;
while(num > 0) {
int i = num % 10;
num = num / 10;
result = result * 10 + i;
}
return result * sign;
}
//A问题分解
//1.1
// 2#1011 = 1*2^0+1*2^0+1*2^2+1*2^3=11
//2进制转10进制(整数)
int TwoToTen(int s2){
int s10=0;
int weight=0;
int tmpS2=s2;
int r=0;
while(tmpS2>0){
r=tmpS2 %10;//最后一位
s10+=r*pow(2,weight);
tmpS2/=10;
weight+=1;
}
return s10;
}
//1.2
//K进制转10进制
int KToTen(int sk,int k){
int s10=0;
int weight=0;
int tmpSk=sk;
int r=0;
while(tmpSk>0){
r=tmpSk %10;//最后一位
s10+=r*pow(k,weight);
tmpSk/=10;
weight+=1;
}
return s10;
}
//2.1
//10进制转2进制
//思路:倒除
//10#13-->8+4+1 = 1011
//13/2=6 余 1
//6/2=3 余 0
//3/2=1 余 1
//1/2=0 余 1
//逆序输出
int TenToTwo(int s10){
bool flag=0;
int s2=0;
int weight=0;
int tmpS10=s10;
int p=0;//商值
int r=tmpS10%2;//余数
if(r==0){flag=1;}
while(tmpS10>0){
p=tmpS10/2;
r=tmpS10%2;
s2+=r*pow(10,weight);
tmpS10=p;
weight+=1;
}
if(!flag){
return s2;
}else{
return 10*s2;
}
}
//2.2
//10进制转k进制
int TenToK(int s10,int k){
bool flag=0;
int sk=0;
int weight=0;
int tmpS10=s10;
int p=0;//商值
int r=tmpS10%k;//余数
if(r==0){//第一个余数为0
flag=1;
}
while(tmpS10>0){
p=tmpS10/k;
r=tmpS10%k;
sk+=r*pow(10,weight);
tmpS10=p;
weight+=1;
}
//最高位是0 例如10#3-->3#10 先得到的是01
if(!flag){
return sk;
}else{
return 10*sk;
}
}
//最终K进制转M进制
//最简单:k->10->m
int KToMSimple(int sk,int k, int m){
int s10=KToTen(sk,k);
int sm=TenToK(s10,m);
return sm;
}
int main(int argc, char* argv[])
{
// printf("Hello World!\n");
//测试2->10
cout<<"2#1011-->10#"<<TwoToTen(1011)<<"\n";//11
cout<<"2#11011-->10#"<<TwoToTen(11011)<<"\n";//27
//测试2->10
cout<<"k2#1011-->10#"<<KToTen(1011,2)<<"\n";//11
cout<<"k2#11011-->10#"<<KToTen(11011,2)<<"\n";//27
//测试3->10
cout<<"k3#11-->10#"<<KToTen(11,3)<<"\n";//4
cout<<"k3#11-->10#"<<KToTen(101,3)<<"\n";//10
cout<<"k3#11011-->10#"<<KToTen(11011,3)<<"\n";//112
cout<<"k3#201-->10#"<<KToTen(201,3)<<"\n";//112
//测试10->2
cout<<"10#13-->2#"<<TenToTwo(13)<<"\n";//1011
cout<<"10#15-->2#"<<TenToTwo(15)<<"\n";//1111
//测试10->2
cout<<"10#13-->2#"<<TenToK(13,2)<<"\n";//1011
cout<<"10#15-->2#"<<TenToK(15,2)<<"\n";//1111
//测试10->3
cout<<"10#13-->3#"<<TenToK(3,3)<<"\n";//10
cout<<"10#13-->3#"<<TenToK(4,3)<<"\n";//11
cout<<"10#15-->3#"<<TenToK(10,3)<<"\n";//101
//测试k->m
cout<<"2#1011-->3#"<<KToMSimple(1011,2,3)<<"\n";//10:11 3:102 2+1*3^2=11
cout<<"2#1101-->3#"<<KToMSimple(1101,2,3)<<"\n";//10:13 3:111 1+1*3^1+1*3^2=13
cout<<"9#312-->4#"<<KToMSimple(312,9,4)<<"\n";//10:11 3:102 2+1*3^2=11
cout<<"9#312-->10#"<<KToTen(312,9)<<"\n";//10:11 3:102 2+1*3^2=11
cout<<"9#254-->4#"<<TenToK(KToTen(254,9),4)<<"\n";//10:11 3:102 2+1*3^2=11
return 0;
}
相关文章推荐
- 【C++心路历程13】进制转换
- C++ 进制转换
- C++小程序(进制转换和排序算法)
- C++第13周项目2——进制转换
- 【进制转换】(2016)第七届蓝桥杯省赛 C/C++ A组 题解(第五题)
- c++ 结构体位域操作 进制转换
- C++中进制转换问题
- C++数据结构与STL--递归--进制转换
- C++实现任意进制转换
- C++面向对象思想下的进制转换
- c++中的进制转换
- C++实现进制转换(十进制转十六进制)
- C++模板-实现栈(进制转换)
- 2013级C++第17周项目【项目4】数组用于进制转换
- C++基础知识复习-【1】进制转换系列之16进制转10进制
- 关于C++下的进制转换
- 期末考试 编程题#8:计算整数k(Coursera 程序设计与算法 专项课程3 C++程序设计 郭炜、刘家瑛;进制转换)
- c++递归实现进制转换
- 在单链表的基础上用c++实现的链栈,并使用进制转换,表达式求值两个小程序来测试
- C++实现栈应用之进制转换