- 浏览: 915441 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
天天来注册:
...
try catch finally 用法 -
tadpole_java:
谢谢你的分享。
二十七、Qt数据库(七)QSqlRelationalTableModel(转) -
359449749tan:
android之EditText文本监听(addTextChangedListener) -
michael_wang:
人过留名 多谢分享
Android NOtification 使用 -
wilsonchen:
wangqi0614 写道这个删除是删除所有的把?能不能值删除 ...
Android的SharedPreferences保存与删除数据简单实例
现在提供一个C语言程序给你,可以实现任何进制(1~16)到任何进制的转换的呢?但是是C语言程序的,可以在VC++6.0Sp6上调试通过的,源程序如下:
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
void main()
{
int i,j,k,m,n,x,b[20],h[20],c,t;
double d,r,p=0;
char a[20];
printf("请输入一个任意进制的数:");
gets(a);//在头文件<string.h>中定义
printf("请输入此数为何种进制的数:");
scanf("%d",&t);
printf("请输入要转换成的进制(1<N<=16):");
scanf("%d",&n);
m=strlen(a);//求字符串的长度
x=m;
for(k=0,j=0;k<m;k++)//主要是分段,以小数点为界限
{
if(a[k]=='.')
{
x=k;
break;
}
if(a[k]=='-')
j++;
}
for(k=x+1;k<m;k++)//修正输入过程中可能会输入不止一个“.”和“-”的问题
{
if(a[k]=='-')
j++;
if(j>1)//如果其中再次遇到“-”证明输入有误,终止程序
{
printf("ERROR!\n");
exit(0);
}
if(a[k]=='.')//如果其中再次遇到“.”证明输入有误,终止程序
{
printf("ERROR!\n");
exit(0);
}
}//注意:前面两个for()循环可以合并成一个循环,这样就可以节约很多的代码的,但是相对而言,两段程序的时间复杂度一样,修改后的代码如下:
/*
i=0;
j=0;
for(k=0;k<m;k++)
{
if(a[k]=='.')
{
i++;
x=k;
}
if(a[k]=='-')
j++;
if(i>1||j>1)
{
printf("ERROR!\n");
exit(0);
}
}*/
for(j=x-1;j>=0;j--)
{
if(a[j]=='-')//符号的处理
break;
if(a[j]=='A')
r=10;
else
if(a[j]=='B')
r=11;
else
if(a[j]=='C')
r=12;
else
if(a[j]=='D')
r=13;
else
if(a[j]=='E')
r=14;
else
if(a[j]=='F')
r=15;
else
if(a[j]<48||a[j]>57&&a[j]<65||a[j]>70)//修正程序输入合不合法问题的判断,此处采用ASCII值进行编辑
//if(a[j]>='G'&&a[j]<='Z'||a[j]>='a'&&a[j]<='z')//此段程序不能判断像输入&、%、#等字符的错误判断
{
printf("ERROR!\n");
exit(0);//在头文件<stdlib.h>中定义,无条件跳出程序的的运行
}
else
r=a[j]-'0';//将字符转换成数字
if(r>=t)
{
printf("ERROR!\n");
exit(0);
}
p=p+r*pow((double)t,(double)(x-j-1));//计算结果
}
if(a[x]=='.')
{
for(j=x+1;j<m;j++)
{
if(a[j]=='A')
r=10;
else
if(a[j]=='B')
r=11;
else
if(a[j]=='C')
r=12;
else
if(a[j]=='D')
r=13;
else
if(a[j]=='E')
r=14;
else
if(a[j]=='F')
r=15;
else
if(a[j]<48||a[j]>57&&a[j]<65||a[j]>70)//修正程序输入合不合法问题的判断,此处采用ASCII值进行编辑
//if(a[j]>='G'&&a[j]<='Z'||a[j]>='a'&&a[j]<='z')//此段程序不能判断像输入&、%、#等字符的错误判断
{
printf("ERROR!\n");
exit(0);
}
else
r=a[j]-'0';//将字符转换成数字
if(r>=t)
{
printf("ERROR!\n");
exit(0);
}
p=p+r*pow((double)t,(double)(x-j));
}
}
if(n==10)//选择性计算,如果是整数就不用进行这一步的计算了,这样可以节约程序的运行时间
{
printf("转换结果为:");
if(a[0]=='-')
{
printf("-");
}
printf("%f",p);
}
else
{
k=p;//强制类型转换,可以使用k=(int)p;代替,从而更加的一目了然
i=0;
while(k)//判定需要转换的数是否变为0
{
h[i++]=k%n;//取余,进行进制转换,但是顺序与正确值相反
k/=n;//转换一位之后进行相应的变化
}
c=0;
//if(p!=(int)p)//选择性计算,如果是整数就不用进行这一步的计算了,这样可以节约程序的运行时间
//{
d=p-(int)p;//取小数部分
while(d!=0)
{
b[c]=(int)(d*n);//算法为×N取整
d=d*n-b[c];
c++;
if(c>=10)
break;//主要是控制小数后面万一出现无限小数的时候好跳出循环以免出现死循环
//}
}
printf("转换结果为:");
if(a[0]=='-')
printf("-");
for(j=i-1;j>=0;j--)//反序输出,大于10的数字进行相应的变化
{
if(h[j]==10)
printf("A");
else
if(h[j]==11)
printf("B");
else
if(h[j]==12)
printf("C");
else
if(h[j]==13)
printf("D");
else
if(h[j]==14)
printf("E");
else
if(h[j]==15)
printf("F");
else
printf("%d",h[j]);
}
if(p!=(int)p)//选择性输出,这样可以节约输出时间和程序的运行时间
{
printf(".");
for(j=0;j<c;j++)//正序输出
{
if(b[j]==10)
printf("A");
else
if(b[j]==11)
printf("B");
else
if(b[j]==12)
printf("C");
else
if(b[j]==13)
printf("D");
else
if(b[j]==14)
printf("E");
else
if(b[j]==15)
printf("F");
else
printf("%d",b[j]);
}
}
if(c>=10)//如果是无限小数则在后以省略号表示
printf("......");
}
printf("\n");//输出换行,以使程序的输出结果美观
}
如果想变为C++程序,只需要做适当的修改就是了的呢?比如输入使用cin,输出使用cout等的就可以了的,主题结果就不用变的就好的!使用函数可以简化程序的,自己可以试一下的,此处只是作为参考的!
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
void main()
{
int i,j,k,m,n,x,b[20],h[20],c,t;
double d,r,p=0;
char a[20];
printf("请输入一个任意进制的数:");
gets(a);//在头文件<string.h>中定义
printf("请输入此数为何种进制的数:");
scanf("%d",&t);
printf("请输入要转换成的进制(1<N<=16):");
scanf("%d",&n);
m=strlen(a);//求字符串的长度
x=m;
for(k=0,j=0;k<m;k++)//主要是分段,以小数点为界限
{
if(a[k]=='.')
{
x=k;
break;
}
if(a[k]=='-')
j++;
}
for(k=x+1;k<m;k++)//修正输入过程中可能会输入不止一个“.”和“-”的问题
{
if(a[k]=='-')
j++;
if(j>1)//如果其中再次遇到“-”证明输入有误,终止程序
{
printf("ERROR!\n");
exit(0);
}
if(a[k]=='.')//如果其中再次遇到“.”证明输入有误,终止程序
{
printf("ERROR!\n");
exit(0);
}
}//注意:前面两个for()循环可以合并成一个循环,这样就可以节约很多的代码的,但是相对而言,两段程序的时间复杂度一样,修改后的代码如下:
/*
i=0;
j=0;
for(k=0;k<m;k++)
{
if(a[k]=='.')
{
i++;
x=k;
}
if(a[k]=='-')
j++;
if(i>1||j>1)
{
printf("ERROR!\n");
exit(0);
}
}*/
for(j=x-1;j>=0;j--)
{
if(a[j]=='-')//符号的处理
break;
if(a[j]=='A')
r=10;
else
if(a[j]=='B')
r=11;
else
if(a[j]=='C')
r=12;
else
if(a[j]=='D')
r=13;
else
if(a[j]=='E')
r=14;
else
if(a[j]=='F')
r=15;
else
if(a[j]<48||a[j]>57&&a[j]<65||a[j]>70)//修正程序输入合不合法问题的判断,此处采用ASCII值进行编辑
//if(a[j]>='G'&&a[j]<='Z'||a[j]>='a'&&a[j]<='z')//此段程序不能判断像输入&、%、#等字符的错误判断
{
printf("ERROR!\n");
exit(0);//在头文件<stdlib.h>中定义,无条件跳出程序的的运行
}
else
r=a[j]-'0';//将字符转换成数字
if(r>=t)
{
printf("ERROR!\n");
exit(0);
}
p=p+r*pow((double)t,(double)(x-j-1));//计算结果
}
if(a[x]=='.')
{
for(j=x+1;j<m;j++)
{
if(a[j]=='A')
r=10;
else
if(a[j]=='B')
r=11;
else
if(a[j]=='C')
r=12;
else
if(a[j]=='D')
r=13;
else
if(a[j]=='E')
r=14;
else
if(a[j]=='F')
r=15;
else
if(a[j]<48||a[j]>57&&a[j]<65||a[j]>70)//修正程序输入合不合法问题的判断,此处采用ASCII值进行编辑
//if(a[j]>='G'&&a[j]<='Z'||a[j]>='a'&&a[j]<='z')//此段程序不能判断像输入&、%、#等字符的错误判断
{
printf("ERROR!\n");
exit(0);
}
else
r=a[j]-'0';//将字符转换成数字
if(r>=t)
{
printf("ERROR!\n");
exit(0);
}
p=p+r*pow((double)t,(double)(x-j));
}
}
if(n==10)//选择性计算,如果是整数就不用进行这一步的计算了,这样可以节约程序的运行时间
{
printf("转换结果为:");
if(a[0]=='-')
{
printf("-");
}
printf("%f",p);
}
else
{
k=p;//强制类型转换,可以使用k=(int)p;代替,从而更加的一目了然
i=0;
while(k)//判定需要转换的数是否变为0
{
h[i++]=k%n;//取余,进行进制转换,但是顺序与正确值相反
k/=n;//转换一位之后进行相应的变化
}
c=0;
//if(p!=(int)p)//选择性计算,如果是整数就不用进行这一步的计算了,这样可以节约程序的运行时间
//{
d=p-(int)p;//取小数部分
while(d!=0)
{
b[c]=(int)(d*n);//算法为×N取整
d=d*n-b[c];
c++;
if(c>=10)
break;//主要是控制小数后面万一出现无限小数的时候好跳出循环以免出现死循环
//}
}
printf("转换结果为:");
if(a[0]=='-')
printf("-");
for(j=i-1;j>=0;j--)//反序输出,大于10的数字进行相应的变化
{
if(h[j]==10)
printf("A");
else
if(h[j]==11)
printf("B");
else
if(h[j]==12)
printf("C");
else
if(h[j]==13)
printf("D");
else
if(h[j]==14)
printf("E");
else
if(h[j]==15)
printf("F");
else
printf("%d",h[j]);
}
if(p!=(int)p)//选择性输出,这样可以节约输出时间和程序的运行时间
{
printf(".");
for(j=0;j<c;j++)//正序输出
{
if(b[j]==10)
printf("A");
else
if(b[j]==11)
printf("B");
else
if(b[j]==12)
printf("C");
else
if(b[j]==13)
printf("D");
else
if(b[j]==14)
printf("E");
else
if(b[j]==15)
printf("F");
else
printf("%d",b[j]);
}
}
if(c>=10)//如果是无限小数则在后以省略号表示
printf("......");
}
printf("\n");//输出换行,以使程序的输出结果美观
}
如果想变为C++程序,只需要做适当的修改就是了的呢?比如输入使用cin,输出使用cout等的就可以了的,主题结果就不用变的就好的!使用函数可以简化程序的,自己可以试一下的,此处只是作为参考的!
发表评论
-
破解VS2008
2012-07-30 10:22 0对于VS2008 Team System 版本的破解 开始- ... -
无法解析的外部符号的 3 种可能
2011-08-19 13:21 27391. lib 文件未引入。可使用“#pragma commen ... -
Qt容器测试
2011-08-14 23:39 1017#include "vectortest.h&quo ... -
const_cast,reinterpret_cast,static_cast,dynamic_cast
2011-08-14 13:34 1102static_cast:用于非多态类型的转换。 dynami ... -
C++调用JAVA方法详解
2011-08-13 20:38 980http://public0821.iteye.com/blo ... -
Music Studio项目心得--JNI实现C++调用JAVA (转)
2011-08-13 19:38 2947http://blog.csdn.net/mdl13412/a ... -
让C++和Java相互调用(2)
2011-08-13 12:53 1153http://chnic.iteye.com/blog/236 ... -
JNI编程 —— 让C++和Java相互调用 (一)
2011-08-13 12:51 1243http://chnic.iteye.com/blog/228 ... -
ava生成dll工具ikvm.net
2011-08-08 14:24 1060IKVM.NET的是开源的基于.NET CLR 的Java虚拟 ... -
Vc中得combox的使用
2011-08-01 00:14 1760一、如何添加/删除Combo Box内容1,在Combo Bo ... -
QT中的元对象系统
2011-07-29 23:42 964Qt中的元对象系统是用来处理对象间通讯的信号/槽机制、运 ... -
C++中this指针的用法.
2011-07-29 23:20 3795this指针只能在一个类的成员函数中调用,它表示当前对象的地址 ... -
QT Designer
2011-07-28 21:44 1162(一)简单继承方式的实现1、QT Designer ... -
QWidget QMainWindow QDialog 之间的区别
2011-07-28 20:27 1166QWidget类是所有用户界面对象的基类。 窗口部件是 ... -
Qt达人
2011-07-27 23:19 984http://www.yafeilinux.com/ ... -
二十七、Qt数据库(七)QSqlRelationalTableModel(转)
2011-07-27 23:16 5793QSqlRelationalTableModel,该类为单张的 ... -
Qt的LineEdit 输入内容控制
2011-07-24 19:42 3396默认下,LineEdit接受任何字符输入,如何让LineEdi ... -
QT + VS2008 环境配置
2011-07-23 10:26 1778最近学习QT,配置环境 ... -
qt4:读取 access 数据库
2011-07-22 09:04 1060一个读取access的例子 1。---------- ... -
QT安装
2011-07-17 22:48 863http://hexlee.iteye.com/blog/49 ...
相关推荐
本篇文章将深入探讨如何在C++中实现十进制与二进制之间的互换。 ### 一、十进制转二进制 #### 1. 使用`std::bitset` C++标准库中的`<bitset>`头文件提供了一个名为`std::bitset`的模板类,用于处理二进制位。我们...
用户可以通过命令行输入一个数,程序会自动进行相应的转换并打印结果。 为了确保程序在DOS环境中正常工作,开发者可能已经考虑了以下几点: 1. 输入输出格式:DOS环境通常使用命令行参数传递输入值,或者通过标准...
由于0xAAAAAAAA是一个二进制掩码,其所有奇数位为1,偶数位为0,这个掩码会确保只有奇偶比特位参与异或操作,其他位保持不变。 例如,如果`num`是10101010(十进制为170),左移一位后变成101010100(十进制为340)...
标题中的“奥贫血十六进制转换器”可能是指一个专门用于进行二进制与十六进制之间转换的工具。在IT领域,进制转换是一项基本技能,尤其在处理计算机数据时,不同进制间的转换非常常见。二进制(Binary)是计算机内部...
格雷码,又称循环二进制码或反射二进制码,是一种特殊的二进制编码方式,其特点在于任意两个相邻的数在它们的数字表示中只有一个数字不同。这种编码方式在数字系统中有着广泛的应用,尤其是在需要高可靠性和低误差的...
当我们有一个四字节的十六进制数时,需要将其转换为二进制形式,然后按照 IEEE754 的结构拆分。转换步骤如下: 1. **十六进制到二进制转换**:将每个字节的十六进制数转换为八位的二进制数。例如,十六进制数 ...
转换时,需要解码这32位数据并按照标准进行计算,将二进制形式转化为十进制的浮点数。 3. **64位转双浮点型(double)** 双浮点型(double)是64位的浮点数,提供更高的精度。同样遵循IEEE 754标准,64位数据由1位...
"浮点数整数之间互换.exe"这个程序很可能是一个图形用户界面应用,用户可以直接输入数值,选择转换类型(浮点数到整数或反之),并指定进制转换的选项。这样的工具在处理工控数据时非常实用,因为它可以快速、准确地...
5. **工具使用**:描述中的工具可能有一个简单的用户界面,用户输入整数后点击按钮,程序会自动计算并显示对应的点分十进制IP地址。它也可能支持批量转换或者命令行接口。 6. **安全性**:尽管这类工具方便,但用户...
例如,当你需要将一个字符(如字母或数字)转换为其对应的十进制或十六进制数值时,或者相反地,将一个十进制或十六进制数值转换回对应的ASCII字符时,就需要进行这种转换。 1. ASCII到十进制转换:每个ASCII字符都...
例如,将十进制转换为二进制,可以先将十进制数除以2,取余数,再将商继续除以2,直到商为0。余数逆序排列即为二进制表示。 六、事件驱动编程 MFC采用事件驱动编程模型,通过消息队列和消息循环来处理用户的操作。...
在补码表示法中,一个负数的补码是其对应的正数二进制表示取反(每一位进行0和1的互换)后再加1。例如,四位二进制补码中,1001表示-7,其计算过程为0111(7的二进制表示)取反得到1000,再加1得到1001。需要注意的...
针对这一需求,本项目提供了一个C++实现的经纬度转换程序,允许用户灵活地进行格式转换,并可自定义转换精度,具有良好的二次开发潜力。 首先,让我们了解经纬度的基本概念。经度表示地球上的东西方向,从本初子午...
在C++编程中,大小写转换是一个常见的任务,特别是在处理字符串时。本文将深入探讨如何在C++中实现高性能的大小写转换算法,以及背后的原理和优化策略。 首先,我们可以利用C++标准库提供的`transform`函数和`::...
2. ASCII码显示:程序会将输入的字符转换为其对应的ASCII码值,并以十进制、十六进制和二进制的形式展示。 3. 字符显示:如果用户输入的是ASCII码值,程序会将其转换为相应的字符。 4. 复制和粘贴功能:用户可以方便...
在编程中,十六进制常用来表示二进制数据,因为每两位二进制可以对应一个十六进制数字。将十六进制数转换为对应的字符,通常涉及ASCII码或Unicode编码。例如,十六进制数'48'对应ASCII码的'0'字符。这种转换在处理...
假设有一个十进制度数为39.9042°,将其转换为度分秒的形式: 1. **确定度数**:整数部分为39°。 2. **计算分数**:小数部分为0.9042,计算其分值为\(0.9042 \times 60 = 54.252\)。 3. **计算秒数**:取第二步中...