有符号整数(int)的汉语读法。

请实现一个函数,给定一个32为有符号整数(int 类型),函数输出该数字符合汉语习惯的读法。例如:10086 读作 " 一万零八十六"。

#include<iostream>
#include<list>
#include<string>
#include<stdlib.h>
#include<math.h>
using namespace std;
void m_itoa(int num,list<char> &vt)
{
    int n=num; 
    if(num<0)
        n=abs(num);
    while(n>0)
    {
        vt.push_front(n%10+‘0‘);
        n/=10;
    }
}
int main()
{
    string n1[]={"零","一","二","三","四","五","六","七","八","九"};
    string n2[]={"个","十","百","千","万","十","百","千","亿","十"};
    int num;
    cin>>num;
    if(num<0)
        cout<<"负";
    list<char> vt;
    m_itoa(num,vt);
    list<char>::iterator str;
    int i=vt.size();
    for(str=vt.begin();str!=vt.end();--i,++str)
    {
        if(*str==‘0‘)
        {
            if(i>8)
                cout<<n2[8];
            else if(i<8 && i>4)
                cout<<n2[4];
                        while(*str==‘0‘)
                        {
                                str++;i--; 
                        }
            if(str==vt.end())
                break;
            else        
                cout<<n1[0];
        }
        cout<<n1[*str-‘0‘];
        if(i>1)
                cout<<n2[i-1];
    }
    cout<<endl;
    return 0;
}
时间: 2024-10-06 11:59:39

有符号整数(int)的汉语读法。的相关文章

整数的汉语读法。

给定一个32为有符号整数(int类型),输出符合汉语习惯的读法,如10086 读作"一万零八十六". 1 #include<iostream> 2 #include<string> 3 #include<math.h> 4 using namespace std; 5 int main() 6 { 7 string dw[]={"","十","百","千","万

有符号整数类型的范围问题

符号整数类型的范围: 整数类型:byte,short,int,long byte: 8 位 -128--->127 short 16位 -32768--->32767 int   32位 -2147483648-->2147483647 long  64位  -9223372036854775808 --> 9223372036854775807 为什么是这样这样的范围: 原码:讲一个数转换为二进制,加上符号位就是原码(0表示整数,1表示负数) 反码:整数的反码就是其原码,负数的反

有符号整数比较v.s.无符号整数比较

本文尝试从汇编的角度给出有符号整数比较与无符号整数比较的区别所在. 在<深入理解计算机系统>(英文版第二版)一书中的Page#77,有下面一个练习题: 将上述示例代码写入foo1.c文件,运行并分析bug产生的代码行. 1. foo1.c 1 #include <stdio.h> 2 3 float sum_elements(float a[], unsigned length) 4 { 5 int i; 6 float result = 0; 7 for (i = 0; i &l

为何八位有符号整数的范围是-128~127,而不是-127~128

八位的带符号的整数,比如JAVA中的byte,c#中的SByte,为什么值域范围都是-128-127而不是-127~128? 事实上,远古时期有些计算机的设计是采用了反码表示有符号数的,因此8位有符号数的范围是-127~127,它的一个缺点是0是有正负.它用一位表示正负数,然对剩余的位数采用取反. 比如,0111 1111表示127,那-127的则是1000 0000.0000 0000表示正的0,而1111 1111则表示成为负0.因此反码作为有符号的整数并未流行. 现在的计算机中,通常将正数

JavaScript:有符号整数与无符号整数相互转化

确实巧妙:原文http://blog.csdn.net/kandyer/article/details/8241937 <script language="JavaScript"><!--    var signed, unsigned;    signed = -1;    unsigned = signed>>>0;    alert ("unsigned="+unsigned);        // unsigned=429

怎么使float保留两位小数或多位小数*如何将整数 int 转换成字串 String

5.怎么使float保留两位小数或多位小数* 两种方法: import java.math.*; -- 方法1: float f = 34.232323; BigDecimal b = new BigDecimal(f); float f1 = b.setScale(2, BigDecimal.ROUND_HALF_UP).floatValue(); // b.setScale(2, BigDecimal.ROUND_HALF_UP) 表明四舍五入,保留两位小数 方法2: float scale

无符号整数和有符号整数

源码:将一个整数换算成二进制,就是其源码. 反码:正数的反码就是其源码,负数的反码是除符号位每一位取反. 补码:整数的补码就是其源码,负数的反码+1就是其补码. 1 #include<stdio.h> 2 int main() 3 { 4 unsigned int a=6; 5 int b=-20; 6 printf("%d\n",a+b); 7 (a+b)>6? puts(">6"):puts("<=6"); 8

关于有符号整数的补码编码的一点经验

以一个字节(8位)编码为例,如果采用补码,则表示的整数(有符号数)范围是[-128,127]. 如果把该二进制编码表示为十进制,则8位编码对应的十进制为0-255,(或者说表示为无符号数就是0-255) 其中[0-127]表示正整数,也是该数本身(对应的无符号数和有符号数一样且都是正整数),绝对值递增 [128-255]表示负整数,其中128表示-128 ,255 表示 -1,也就是说绝对值是递减的. 所以根据编码快速求出编码前的数的方法之一是:如果编码为0-127,那么编码前的数也是0-127

C#Winform基础 八进制数转换为十进制数(无符号,整数,正数)

镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ 1 UI 2 code 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using S