当前位置:学习生活->会员解答 ->c++ 初学者关于简单程序的问题

原创版权标志c++ 初学者关于简单程序的问题

作者:崔大剩  发表时间:2018/7/8 23:40:27  阅读:
[摘要] C++技术网已经用心解答了用户提出的问题【c++ 初学者关于简单程序的问题】,如还有问题,请继续在文章底部留言交流,直到完全懂了为止。
使用支付宝扫码领红包,余额宝付款才可以使用红包哦!不要忘记哈。每天扫一次,天天赚红包!!可以将二维码保存到手机,每天直接扫码领红包啦!!

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

例如:

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;
}
    效果图如下:

单位转换问题

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

微信扫码关注公众号CPP技术网,微信号cpp_coder,关注我们的公众号,阅读更多精彩内容!每天还可以领取大红包哦!!!每天还可以领取大红包哦!!!每天还可以领取大红包哦!!!
文章来源:C++技术网原创文章版权为网站和作者共同所有,会员文章禁止转载。非会员文章转载做好本文超链接即表示授权转载。通过文章下面的分享按钮可以自由分享所有文章。

返回顶部

在线提问
问题标题:
问题描述:(简陋的描述会导致问题被最后回答、没有针对性回答甚至无法解答。请确保问题描述的足够清楚。)