当前位置:C++技术网 > 资讯 > c++ 初学者关于简单程序的问题

c++ 初学者关于简单程序的问题

更新时间:2018-07-08 23:40:27浏览次数:1+次

要做一个小程序。目标将输入的数字(个位和多位)转换成“元 角 分”这样的输出。

例如:

cin >> 123;

程序输出:一元二角三分

cin >> 12345;

程序输入:一百二十三元四角五分 // 若例2过于复杂,可先实现例1;学生初学不久,叨扰老师,谢谢并请见谅!

学生水平: 初步学习了 数组 指针 循环 等。参考资料为(c++primer plus)


C++技术网会员解答:

    您好,这其实不是一个编程语法问题,而是一个数学问题。

    在金钱的单位换算里,123其实是123分钱,十位是角,百位是元,个位是分。所以从数学上讲就是1百分(1元)+20分(2角)+3分。那么12345以此类推,仅仅是到百位结束而已。所以是123百分+40分(4角)+5分。

    如果想知道一个分钱数的元数,我们只需要除以100就可以得到元了。所以,123/100=1.23,这是数学运算的结果。但是如果在C++里,我们直接用整数123除以整数100,那么得到的结果会截断小数,只留下整数部分,所以是123/100=1,这是编程的整数相除的结果。

    那么我们得到了元,那么就要将元对应的数值减掉。我们可以这样:123-1*100=23,这样没有错误。然而这样却比较麻烦。我们在数学里可以用取余来得到结果。123对100取余,得到余数23。在编程里,我们用取模操作符%得到余数23,即123%100=23。

    为什么要减除100?因为100已经在取元过程中消耗了,不能再作为取角而用了,所以必须除掉。而取模操作就是将整倍的数据滤除,留下不足的余数。那么我们用余数23除以10得到2(编程里的整数相除),也就是2角。此时再用23对10取模,得到余数的分钱,即3分钱。

    最后结果就是:1元2角3分

    我们的案例一的核心实现代码是:

int a = 123;
int y = a / 100 ; // 1 元
int j = (a % 100) / 10; // 2角
int f = (a % 100) % 10; // 3分
cout << y <<"元" <<j<<"角" <<f<<"分" ;
   下一步就是加入了对百位十位的判断,其实和元角分是一回事。如果你理解了元角分的计算原理,那么这个也就是一回事了。我们只需要将案例一里的元取到的结果再进行元角分这样的切割,形成百十个位显示就行了。

   下一步代码如下:

int a = 12345;
int y = a / 100 ; // 1 元

int b = y / 100 ; //1百元
int s = (y % 100) / 10 ; //2十元
int g = (y % 100) % 10 ; //3元

int j = (a % 100) / 10; // 4角
int f = (a % 100) % 10; // 5分
cout << b << "百"<<s<<"十"<<g<<"元" <<j<<"角" <<f<<"分" ;
   不过,我们这里都是直接用阿拉伯数字输出的1百2十3元4角5分。我们的结果要中文的数字,所以我们再加一个转换的函数即可,函数如下:

string getch(int d)
{
    switch (d)
    {
    case 0:
        return "零";
    case 1:
        return "一";
    case 2:
        return "二";
    case 3:
        return "三";
    case 4:
        return "四";
    case 5:
        return "五";
    case 6:
        return "六";
    case 7:
        return "七";
    case 8:
        return "八";
    case 9:
        return "九";
    default:
        break;
    }
}
  我们再将输出的结果换成转换成中文的数字,代码如下:

    string b1, s1, g1, j1, f1;
    b1 = getch(b);
    s1 = getch(s);
    g1 = getch(g);
    j1 = getch(j);
    f1 = getch(f);
    cout << b1.c_str() << "百" << s1.c_str() << "十" << g1.c_str() << "元" << j1.c_str() << "角" << f1.c_str() << "分" << endl;
    记得在开头包含头文件:

#include <iostream>
using namespace std;
    b1等输出是用c_str()函数取得C格式的字符串来输出。

    完整的代码如下:

#include <iostream>
using namespace std;

string getch(int d)
{
    switch (d)
    {
    case 0:
        return "零";
    case 1:
        return "一";
    case 2:
        return "二";
    case 3:
        return "三";
    case 4:
        return "四";
    case 5:
        return "五";
    case 6:
        return "六";
    case 7:
        return "七";
    case 8:
        return "八";
    case 9:
        return "九";
    default:
        break;
    }
}

int main()
{
    int a ;
    cout << "请输入:";
    cin >> a;
    int y = a / 100; // 1 元

    int b = y / 100; //1百元
    int s = (y % 100) / 10; //2十元
    int g = (y % 100) % 10; //3元

    int j = (a % 100) / 10; // 4角
    int f = (a % 100) % 10; // 5分

    string b1, s1, g1, j1, f1;
    b1 = getch(b);
    s1 = getch(s);
    g1 = getch(g);
    j1 = getch(j);
    f1 = getch(f);
    cout << b1.c_str() << "百" << s1.c_str() << "十" << g1.c_str() << "元" << j1.c_str() << "角" << f1.c_str() << "分" << endl;
    return 0;
}
    效果图如下:

单位转换问题

    因为这个问题已经解答了很长了。你可以在新问题里提第二个案例,我再来详细解答。