本題可以先做1~4的數字。 EX: 1234
其他大於4位數的數字就可以拆開依序帶入function即可
EX: 1234,5678,9001
可分成3部分依序去解
1234
5678
9001
最後合併就可以了
[簡答]:
#include <stdio.h>
#include <iostream>
#include <string.h>
using namespace std;
char* digit[6] = {"","拾","佰","仟","萬","億"};
char* text[10] = {"零","壹","貳","參","肆","伍","陸","柒","捌","玖"};
bool BaseMath(char*num)
{
bool lastNumIsZero = false;
int numLen = strlen(num);
if(numLen > 4){cout << "ERROR" << endl; return false;}
if(numLen == 4){
if(num[0] == '0' && num[1] == '0'&& num[2] == '0' && num[3] == '0')
return false;
}
for(int i=0; i<numLen ; ++i){
if(num[i] == '0'){
bool remainIsZero = true;
for(int j=i+1 ; j < numLen ; ++j){
if(num[j] != '0') remainIsZero = false;
}
if(!lastNumIsZero && !remainIsZero) cout << text[0];
lastNumIsZero = true;
}
if(num[i] != '0'){
lastNumIsZero = false;
int tindex = num[i] -'0';
int dindex = numLen-i-1;
cout << text[tindex]
<< digit[dindex];
}
}
return true;
}
void SplitMath(char* num)
{
int numLen = strlen(num);
if(numLen < 5){
BaseMath(num);
cout << endl;
}else if(numLen < 9){
char M_Math[5];
char L_Math[5];
int mindex = numLen - 4;
int i=0;
for(i ; i<mindex ; ++i ){
M_Math[i] = num[i];
}M_Math[i] = '\0';
strcpy(L_Math,&num[mindex]);
if(BaseMath(M_Math))
cout << digit[4];
BaseMath(L_Math);
cout << endl;
}else if(numLen < 13){
char B_Math[5];
char M_Math[5];
char L_Math[5];
int bindex = numLen - 8;
int mindex = numLen - 4;
int i=0;
for(i ; i<bindex ; ++i ){
B_Math[i] = num[i];
}B_Math[i] = '\0';
int j=bindex;
int k = 0;
for(j,k ; j<mindex ; ++j, ++k ){
M_Math[k] = num[j];
}M_Math[k] = '\0';
strcpy(L_Math,&num[mindex]);
if(BaseMath(B_Math))
cout << digit[5];
if(BaseMath(M_Math))
cout << digit[4];
BaseMath(L_Math);
cout << endl;
}
}
int main()
{
char str[101];
while(cin >> str){
SplitMath(str);
}
return 0;
}