要做一个小程序。目标将输入的数字(个位和多位)转换成“元 角 分”这样的输出。
例如:
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<<"分" ;
下一步代码如下:
不过,我们这里都是直接用阿拉伯数字输出的1百2十3元4角5分。我们的结果要中文的数字,所以我们再加一个转换的函数即可,函数如下:
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<<"分" ;
我们再将输出的结果换成转换成中文的数字,代码如下:
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;
b1等输出是用c_str()函数取得C格式的字符串来输出。
#include <iostream>
using namespace std;
完整的代码如下:
效果图如下:
#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;
}
因为这个问题已经解答了很长了。你可以在新问题里提第二个案例,我再来详细解答。