`#include "cassert"
#include "calc.h"
const string a[] = { "零","壹","贰","叁","肆","伍","陆","柒","捌","玖" };
const string b[] = { "元","拾","佰","仟","萬","亿"};
string Xs(const int k[]){
string c;
c+=a[k[1]],c+="角",c+=a[k[0]],c+="分";
return c;
}
string Yuan(const int k[]) {
string c;
if (k[0] == 0) {
if (k[1] == 0) {
if (k[2] == 0) {
if (k[3] == 0)c+=a[0];
else c+=a[k[3]],c+=b[3];
} else {
if (k[3] == 0)c+=a[k[2]],c+=b[2];
else c+=a[k[3]],c+=b[3],c+=a[k[2]],c+=b[2];
}
} else {
if (k[2] == 0) {
if (k[3] == 0){if(k[1]==1)c+=b[1]; else c+=a[k[1]],c+=b[1];}
else c+=a[k[3]],c+=b[3],c+=a[0],c+=a[k[1]],c+=b[1];
} else {
if (k[3] == 0)c+=a[k[2]],c+=b[2],c+=a[k[1]],c+=b[1];
else c+=a[k[3]],c+=b[3],c+=a[k[2]],c+=b[2],c+=a[k[1]],c+=b[1];
}
}
}
else {
if (k[1] == 0) {
if (k[2] == 0) {
if (k[3] == 0)c+=a[k[0]];
else c+=a[k[3]],c+=b[3],c+=a[0],c+=a[k[0]];
}
else {
if (k[3] == 0)c+=a[k[2]],c+=b[2],c+=a[0],c+=a[k[0]];
else c+=a[k[3]],c+=b[3],c+=a[k[2]],c+=b[2],c+=a[k[0]];
}
} else {
if (k[2] == 0) {
if (k[3] == 0)c+=a[k[1]],c+=b[1],c+=a[k[0]];
else c+=a[k[3]],c+=b[3],c+=a[0],c+=a[k[1]],c+=b[1],c+=a[k[0]];
}
else {
if (k[3] == 0)c+=a[k[2]],c+=b[2],c+=a[k[1]],c+=b[1],c+=a[k[0]];
else c+=a[k[3]],c+=b[3],c+=a[k[2]],c+=b[2],c+=a[k[1]],c+=b[1],c+=a[k[0]];
}
}
}
c+=b[0];
return c;
}
string Wang(const int k[]){
string c;
if (k[0] == 0) {
if (k[1] == 0) {
if (k[2] == 0) {
if (k[3] == 0);
else c+=a[k[3]],c+=b[3];
} else {
if (k[3] == 0)c+=a[k[2]],c+=b[2];
else c+=a[k[3]],c+=b[3],c+=a[k[2]],c+=b[2];
}
} else {
if (k[2] == 0) {
if (k[3] == 0){if(k[1]==1)c+=b[1]; else c+=a[k[1]],c+=b[1];}
else c+=a[k[3]],c+=b[3],c+=a[0],c+=a[k[1]],c+=b[1];
} else {
if (k[3] == 0)c+=a[k[2]],c+=b[2],c+=a[k[1]],c+=b[1];
else c+=a[k[3]],c+=b[3],c+=a[k[2]],c+=b[2],c+=a[k[1]],c+=b[1];
}
}
}
else {
if (k[1] == 0) {
if (k[2] == 0) {
if (k[3] == 0)c+=a[k[0]];
else c+=a[k[3]],c+=b[3],c+=a[0],c+=a[k[0]];
}
else {
if (k[3] == 0)c+=a[k[2]],c+=b[2],c+=a[0],c+=a[k[0]];
else c+=a[k[3]],c+=b[3],c+=a[k[2]],c+=b[2],c+=a[k[0]];
}
} else {
if (k[2] == 0) {
if (k[3] == 0)c+=a[k[1]],c+=b[1],c+=a[k[0]];
else c+=a[k[3]],c+=b[3],c+=a[0],c+=a[k[1]],c+=b[1],c+=a[k[0]];
}
else {
if (k[3] == 0)c+=a[k[2]],c+=b[2],c+=a[k[1]],c+=b[1],c+=a[k[0]];
else c+=a[k[3]],c+=b[3],c+=a[k[2]],c+=b[2],c+=a[k[1]],c+=b[1],c+=a[k[0]];
}
}
}
c+=b[4];
return c;
}
int wei(int x){
int i=0;
for (;x>0;++i,x/=10);
return i;
}
string convert(double x,string buffer) {
x *= 100;
if(x==0){
buffer+=a[0],buffer+=b[0],buffer+=a[0],buffer+="角",buffer+=a[0],buffer+="分";
return buffer;
}
int d = (int) x;
int length=wei(d);
assert(length>=0);
string wangg,yuann,xss;
int xs[2];
int yuan[4];
int wang[4];
for (int i = 0; i < 2&&length>=0; ++i, d /= 10,--length)xs[i] = d % 10;
for (int i = 0; i < 4&&length>=0; ++i, d /= 10,--length)yuan[i] = d % 10;
for (int i = 0; i < 4&&length>=0; ++i, d /= 10,--length)wang[i] = d % 10;
if(wang[0]||wang[1]||wang[2]||wang[3]){
wangg=Wang(wang);
buffer+=wangg;
}
yuann=Yuan(yuan);
buffer+=yuann;
xss=Xs(xs);
buffer+=xss;
return buffer;
}
`
It will make the Arabic nuimerals to chinese numerals,but when I
why when I change the( for (int i = 0; i < 4&&length>=0; ++i, d /= 10,–length)yuan[i] = d % 10;)length>=0 to length>0,it told me -1073741819 (0xC0000005). and
if(){ wangg=Wang(wang); buffer+=wangg; }
This part seem not be controlled by
wang[0]||wang[1]||wang[2]||wang[3]
even if I If(0) also have output of this part.
Thank you for your patience,my English really bad.`
New contributor
user24946743 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.