精华内容
下载资源
问答
  • 数字(int型范围内正整数)和中文的相互转换

    借鉴于http://blog.csdn.net/jjfly999/article/details/51052492,谢谢猿友jjfly999的分享

    分析:

    汉字用零一二三四五六七八九作为基本计数,与阿拉伯数字靠数字偏移位置的权位不一样,中文数字是才有“数字+权位”的方式组成数字。

    中文计数以万为小节,万以下没有节权,万之上是亿为节权(亿之上还有:万亿、兆、万兆、亿兆等)。

    中文还有一个特点是多变的“零”,大概总结为三个规则:

    1.以10000为小节,小节的结尾即使是0,也不使用“零”。

    2.小节内两个非0数字之间要使用“零”。

    3.当小节的“千”位是0时,若本小节的前一小节无其他数字,则不用“零”,否则就要用“零”。

    算法设计:

    首先定义三个字符串数组,存放数字位、节权位、权位。

    然后再分两个方法实现:一个实现节权的操作处理,还有一个实现小节内的操作。

    注意事项:

    1.本文讨论int型范围内的正整数。

    1.通过String类的charAt(index)方法获得的是字符,进行比较时采用 ==

    相关的方法:


    详细代码:

    public class Exchange {
    	
    	/*
    	 * 阿拉伯数字转中文
    	 */
    	public String numberToChinese(int num){
    		
    		String[] chineseSectionPosition = {"","万","亿","万亿"}; //中文数字节权位
    		
    		if(num == 0){
                return "零";
            }
    		int sectionPosition = 0; //节权位标识
    		String endChineseNum = new String(); //最终转换完成的中文字符串
    		String sectionChineseNum = new String(); //每个小节转换的字符串
    		while(num>0){ //将阿拉伯数字从右往左每隔4位分成一个小节,在分别对每个小节进行转换处理,最后加上该小节对应的节权
    			int section = num%10000; //获取最后一个小节(低4位数:千百十个)
    			sectionChineseNum = eachSection(section); //将当前小节转换为中文
    			if(section != 0){ //当前小节不为0时,添加节权
    				sectionChineseNum = sectionChineseNum + chineseSectionPosition[sectionPosition];
    			}
    			num = num / 10000; //去掉已经转换的末尾4位数
    			endChineseNum = sectionChineseNum + endChineseNum;
    			sectionPosition++; //节权位增加1
    		}
    		if('零' == endChineseNum.charAt(0)){
    			endChineseNum = endChineseNum.substring(1);
    		}
    		return endChineseNum;
    	}
    	
    	/*
    	 * 中文转阿拉伯数字
    	 */
    	public int chineseToNumber(String chineseNum){
    		
    		int number = 0; //保存阿拉伯数字
    		String str1 = new String(); //保存“亿”节权部分
            String str2 = new String(); //保存“万”节权部分
            String str3 = new String(); //保存 “” 节权部分
    		int k = 0; //用于记录节权位置
    		boolean deal = true; //该节权部分已经处理
    		//去除字符串中“零”
    		for(int i=0;i<chineseNum.length();i++){
    			if('零' == chineseNum.charAt(i)){
    				chineseNum = chineseNum.substring(0, i) + chineseNum.substring(i+1);
    			}
    		}
    		//各部分节权处理,将中文以小节为单位截取存入不同的字符串中
    		String str = chineseNum;
    		for(int i=0;i<str.length();i++){
    			if(str.charAt(i) == '亿'){ //截取“亿”前面部分
    				str1 = str.substring(0, i);
    				k = i+1; //“亿”的位置
    				deal = false;
    			}
    			if(str.charAt(i) == '万'){//截取“亿”后面部分
    				str2 = str.substring(k,i); //截取“万”前面部分
    				str3 = str.substring(i+1); //截取“万”后面部分
    				deal = false;
    			}
    		}
    		if(deal){ //该数小于万
    			str3 = str;
    		}
    		//将中文转换为阿拉伯数字
    		number = eachSection(str1)*100000000 + eachSection(str2)*10000 + eachSection(str3);
    		
    		return number;
    	}
    	
    	/*
    	 * 阿拉伯数字转中文---一个小节的操作
    	 */
    	public String eachSection(int num){ //重载方法
    		
    	    String[] chineseNumber = {"零","一","二","三","四","五","六","七","八","九"}; //中文数字位
    	    String[] chinesePosition = {"","十","百","千"}; //中文数字权位
    		
    		String chineseNum = new String(); //转换的中文数字
    		boolean zero = true; //小节内部制零判断,每个小节内部只能出现一个中文“零”
    		for(int i=0;i<4;i++){ //每个小节中只有4位数
    			int end = num%10; //获取末位值
    			//判断该数字是否为0。若不是0就直接转换并加上权位,若是0,继续判断是否已经出现过中文数字“零”
    			if(end == 0){ //该数字是0
    				if(!zero){ //上一位数不为0,执行补0
    					zero = true;
    					chineseNum = chineseNumber[0] + chineseNum;
    				}
    			}else{ //该数字不为0,直接转换并加上权位
    				zero = false;
    				chineseNum = chineseNumber[end] + chinesePosition[i] + chineseNum; //数字+权位
    			}
    			num = num/10;
    		}
    		return chineseNum;
    	}
    	
    	/*
    	 * 中文转阿拉伯数字---一个小节的操作
    	 */
    	public int eachSection(String chineseNum){ //重载方法
    		
    	    //map集合,用于中文转数字
    		Map<Character,Integer> map = new HashMap<Character,Integer>();
    		char[] ch = {'零','一','二','三','四','五','六','七','八','九'}; //数字位
    		for(int i=0;i<ch.length;i++){
    			map.put(ch[i],i);
    		}
    		//权位
    		map.put('十',10);
            map.put('百',100);
            map.put('千', 1000);
    		
    		int result = 0; //保存转换的数字
            int num = 0; //保存每一个数字
    		for(int i=0;i<chineseNum.length();i++){
    			int v = map.get(chineseNum.charAt(i));
    			//判断是数字还是权位(第1个字符是数字,2个是权位。。。依次类推)
    			if(v==10 || v==100 || v==1000){ //权位
    				result = result + num * v;
    			}else if(i == chineseNum.length()-1){ //判断是否为个位
    				result = result + v;
    			}else{ //不是个位
    				num = v;
    			}
    		}
    		return result;
    	}
    }
    

    测试:

    public class Test {
    	public static void main(String[] args) {
    		Exchange ex = new Exchange();
    		int i = 1212341234;
    		String str = ex.numberToChinese(i);
    		System.out.println(i+"---转换的中文:"+str);
    		System.out.println(str+"---转换的数字:"+ex.chineseToNumber(str));
    	}
    
    }

    输出结果:

    1212341234---转换的中文:一十二亿一千二百三十四万一千二百三十四
    一十二亿一千二百三十四万一千二百三十四---转换的数字:1212341234











    展开全文
  • int范围是-2147483648~2147483647。计算方法如下:计算机中32位int类型变量的范围,其中int类型是带符号整数。正数在计算机中表示为原码,最高位为符号位:1的原码为0000 0000 0000 0000 0000 0000 0000 ...

    d394e622e5f5c57f7cd3335333cea3f2.png

    int的范围是-2147483648~2147483647。

    计算方法如下:

    计算机中32位int类型变量的范围,其中int类型是带符号整数。

    正数在计算机中表示为原码,最高位为符号位:

    1的原码为0000 0000 0000 0000 0000 0000 0000 0001

    2147483647的原码为0111 1111 1111 1111 1111 1111 1111 1111

    所以最大的正整数是2147483647

    负数在计算机中表示为补码,最高位为符号位:

    -1:

    原码为1000 0000 0000 0000 0000 0000 0000 0001,

    反码为1111 1111 1111 1111 1111 1111 1111 1110,

    补码为1111 1111 1111 1111 1111 1111 1111 1111

    -2147483647:

    原码为1111 1111 1111 1111 1111 1111 1111 1111,

    反码为1000 0000 0000 0000 0000 0000 0000 0000,

    补码为1000 0000 0000 0000 0000 0000 0000 0001

    所以最小的负数是-2147483647吗?错,不是。

    在二进制中,0有两种表方法。

    +0的原码为0000 0000 0000 0000 0000 0000 0000 0000,

    -0的原码为1000 0000 0000 0000 0000 0000 0000 0000,

    因为0只需要一个,所以把-0拿来当做一个最小的数-2147483648。

    -2147483648的补码表示为1000 0000 0000 0000 0000 0000 0000 0000,在32位没有原码。

    注意,这个补码并不是真正的补码,真正的补码是1 1000 0000 0000 0000 0000 0000 0000 0000,溢出。

    所以带符号32位int类型整数为-2147483648~2147483647

    编程可直接调用函数求出范围:#include

    #include

    int max = INT_MAX;//最大数

    int min = INT_MIN;//最小数

    int main(){

    printf("max = %d\nmin = %d\n", max, min);

    return 0;

    }

    4a96e94adc47f632667ee208f8edbeaa.png

    展开全文
  • 题目范围为(-2的31次方)到(2的31次方),但int范围为(2的-31次方)到(2的31次方-1)在最大值这里会超过int型范围。另外两个int型变量相加,最后可能超过int型,因此本题必须用long long作为ABC的变量类型,输入...

    B1011 A+B 和 C (15分)

    Note:

    题目范围为(-2的31次方)到(2的31次方),但int范围为(2的-31次方)到(2的31次方-1)在最大值这里会超过int型范围。另外两个int型变量相加,最后可能超过int型,因此本题必须用long long作为ABC的变量类型,输入输出格式为%lld。long long 范围为(-2的63次方)到(2的63次方-1).

    问题描述:

    给定区间 [−2​31​​,2​31​​] 内的 3 个整数 A、B 和 C,请判断 A+B 是否大于 C。

    输入格式:

    输入第 1 行给出正整数 T (≤10),是测试用例的个数。随后给出 T 组测试用例,每组占一行,顺序给出 A、B 和 C。整数间以空格分隔。

    输出格式:

    对每组测试用例,在一行中输出 Case #X: true 如果 A+B>C,否则输出 Case #X: false,其中 X 是测试用例的编号(从 1 开始)。

    输入样例:

    4
    1 2 3
    2 3 4
    2147483647 0 2147483646
    0 -2147483648 -2147483647
    

    输出样例:

    Case #1: false
    Case #2: true
    Case #3: true
    Case #4: false
    #include<cstdio>
    #include<stdlib.h>
    using namespace std;
    
    int main(){
    	int T;
    	scanf("%d",&T);
    	
    	int i;
    	long long A, B, C;
    	for(i = 1; i <= T; i++){
    		scanf("%lld%lld%lld",&A,&B,&C);
    		if(A + B > C)
    			printf("Case #%d: true\n",i);
    		else
    			printf("Case #%d: false\n",i);
    	}
    	system("pause");
    	return 0;
    }
    

     

    展开全文
  • 大家都知道 int是signed型变量,而unsigned int是无符号型变量. ...int型变量的范围是 -2147483648~2147483647 unsigned int型变量的范围是0~4294967295 大家不妨可以这样联想下,如图:...

    大家都知道 int是signed型变量,而unsigned int是无符号型变量.

    那么问题来了,signed和unsigned到底有什么区别?

    就像-1和1,    -1就是有符号.  1是无符号型的

     

    int型变量的范围是 -2147483648~2147483647

     

    unsigned int型变量的范围是0~4294967295

     

     

    大家不妨可以这样联想下,如图:

     

     

    int 型变量范围是在 -2147483648~2147483647这个范围之内的,也就是A范围+C范围

    unsigned int 范围是在 0~4294967295这个范围之内的,并没有负数,也就是C范围+B范围

     

    int =A+C;

    unsigned int=C+B;

    所以说:

    两者共同拥有C这个范围区间 and 4294967295-2147483647=2147483648

    因此得出如下结论:

    1. A=B

    2. A范围是int型变量的负数范围,而恰恰unsigned int的范围是B+C,因为A=B,所以:unsigned int的范围=A+C

     

    如果将一个int型的负数变量转换为unsigned int时应这样转变

    eg :

    int a=-1;

    unsigned b=(unsigned)a;

    ---------after-----------

    b就等于C范围加上1; b=2147483647+1=2147483648

     

     

     

     

     

     

    展开全文
  • 计算机int型数值范围

    2020-09-11 14:38:25
    计算机中int类型的取值范围是-2^31 - 2^31-1 ,也就是-2147483648 - 2147483647 。在计算机二进制中符号为最高位占一位,负数用补码表示,正零为打正零负零
  • C语言int型数据范围

    2017-09-09 19:52:00
    在32位及以上操作系统上,int型数据的十进制表示范围是:-231到 231-1。原因:因为int是带符号类型,所以最高位为符号位,于是最大表示的正数的原码(正数的原码和补码相同):01111111 11111111 11111111 11111111...
  • int型数字取值范围

    2009-04-25 00:46:21
    怎样确定int型数据在十六位的取值范围,从根本上解决你的疑惑。
  • int型整数的范围

    万次阅读 2018-08-10 16:40:06
    计算机中32位int类型变量的范围,其中int类型是带符号整数。 正数在计算机中表示为原码,最高位为符号位: 1的原码为0000 0000 0000 0000 0000 0000 0000 0001 2147483647的原码为0111 1111 1111 1111 1111 1111 ...
  • 先上代码,通过下面代码的执行结果观察public class Test {public static void main(String[] args) {// 2的31次方int j = (int) Math.pow(2,31);System.out.println("j的值" + j);}}运行结果:j的值2147483647继续...
  • PLC中INT型数据的存储形式今天早上同事问我,想让PLC中一个INT型变量所有位均为1,用十进制应该赋哪个值?看似一个简单的问题,且涉及到了INT型数据的存储形式。熟悉PLC的朋友应该知道,INT型数据在PLC中占用两个...
  • int型数据超过范围后值变化

    千次阅读 2018-06-11 11:16:51
    int型整数超出自己范围时,会从它的最小值重新开始,例如: int i=2147483647;//int范围:-2147483648~2147483647 i+1;//i=-2147483648 unsigned int j=4294967295 ; //unsigned int范围:0~4294967295 j+...
  • int型整数的数值范围

    2019-07-08 21:09:40
    假设int型用两个字节表示对于有符号的整数,用补码表示的话,最高位是符号位,后面15位用来表示数据.1.正数,表示的范围为0000 0000 0000 0001-0111 1111 1111 1111,最高位是符号位,不能用于表示数据,所以正数的数值...
  • 为什么c语言中int的表示范围是-32768~32767 这得从二进制的原码说起 如果以最高位为符号位二进制原码最大为0111111111111111=215-1=32767 最小为1111111111111111=-215-1=-32767 此时0有两种表示方法即正0和负...
  • long型数据是int型数据长度的两倍。int型是4字节32位,那么long型是8字节64位,所以long表示的数据范围是2^63 -1。long long也有可能是这个范围
  • 目录C++ int型,题目 C++ int型, C++ int 型一般为32位,范围为[−2[^31], 2[^31] − 1] ,当负数最小值转换成正数时会溢出,所以要特别小心。 题目 实现函数double Power(double base, int exponent),求base的...
  • 首先题目:计算**1!... int i , j ; double sum = 0 , amass = 1 ; //每一项积 for( i = 1 ; i <= 20 ; i++ ) { for( j = 1 ; j <= i ; j++ ) { amass = amass * j ; } sum = sum + a...
  • 要求:输入一个int型整数,将这个整数中每位上的数字进行反转(除福符号位外)输出,若反转后的数字超过了int型范围,则输出0; 如:12340--------4321 -1234-----------(-4321) 方案:1.首先从键盘输入一个int...
  • Python中int的取值范围是多少发布时间:2020-10-30 09:33:50来源:亿速云阅读:66作者:小新这篇文章将为大家详细讲解有关Python中int的取值范围是多少,小编觉得挺实用的,因此分享给...获得int型所占字节数#inc...
  • 在C语言中,int型数据的取值范围

    万次阅读 2012-07-02 20:52:55
    在C语言中,int型数据所占的字节和具体的编译器有关,32位编译器int占4个字节(VC,C-free),16位编译器int占2个字节(详见“int型数据所占字节和什么有关”)。 以两个字节为例: 在C中,int型数据是一个有符号...
  • 【160602SHS00001】 数据库存的是这种格式的字符串,现在要按后面五位数字去范围查询,比如查询 1-5范围就查询出【160602SHS00001,160602SHS00002,160602SHS00003,160602SHS00004,160602SHS00005】 这样SQL语句...
  • int型的数值默认长度为4,即4个字节32位,2的32次方是+2,147,483,647;bigint类型的最大数值是9,223,372,036,854,775,807。 如果要在数据库中存手机号码的话,非得用数字就用bigint数据类型,或者使用varchar类型,...
  • int型和string型

    2014-07-25 16:31:28
    int 数据长度,有最大长度限制 在数据库中有tinyint,smartint,mediumint,int,bigint 以下是每个整数类型的存储和范围(来自mysql手册) 类型 字节 最小值 最大值 ...
  • int 是4个字节,1个字节等于8个比特,共有4*8个比特,每个比特位不是1就是0,那么就有2种选择, 而在二进制里,我们把第一个比特位...可我们计算机里是从0开始计数,组合数231要减去1才是int型能表示的最大值。 换个说
  • 题目:给定一个整数n,求它十进制中1的个数,下面是我的代码。...int main() { int n,a=0; scanf("%d",&n); while(n>0){ if(n%10==1) a++; n/=10; } printf("%d",a); return 0; }
  •  * 无限数加法 超出计算机表示范围 溢出 int型  * @param src  * @param target  * @return  */  public String addition(String src,String target)  { ...
  • java中int型数据在运算中如果超出有效范围造成精度损失如何解决 long a=123456789*123456789;//不加L会被视为int型,当两个int相乘的结果大于int范围时,就会却值 long b=123456789L*123456789L;//正常运行结果 ...
  • (2021.01.11) 【数据类型】达到10的8次方的运算要使用Long。(P5703苹果采购)
  • Java关于long型和int型整数相加的问题

    千次阅读 2020-07-03 15:29:50
    当两个int型相加超出int范围时,即使接受的参数是long型也会造成精度损失,原因是: 两个int型相加是会先转换成int型然后再赋值,所以再相加前要先转换成long型。 示例: int m = 2147483647; //输出-2147483648...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,213
精华内容 2,085
关键字:

int型范围