谁来帮我测试一下这个程序?

Sarlanori 2008-03-07 03:26:29
我写了一个将阿拉伯数字转换成大写中文的程序,在我的机器上运行没问题,可上传到ZeroJudge上后就会出错,麻烦哪位帮我测试一下这个数字1023004看看有没有错,我的QQ147511682,以下是源程序:
#include <iostream>
#include <string>
using namespace std;

string convert(char number);
int main()
{
string x;
int count = 0;
string output;
while(cin >> x)
{
count = x.length();
for(int i = 0;i < x.length();i++)
{
switch(count)
{
//十亿位
case 10:
if(x[i] != '0')
{
output += convert(x[i]);
output += "拾";
}
break;
//亿位
case 9:
if(x[i] != '0')
{
output += convert(x[i]);
output += "億";
}
else
{
output += "億";
}
break;
//千万位
case 8:
if(x[i] != '0')
{
output += convert(x[i]);
output += "仟";
}
else if(x[i] == '0' &&
(x[i + 1] != '0' || x[i + 2] != '0'
|| x[i + 3] != '0' || x[i + 4] != '0' || x[i + 5] != '0'
|| x[i + 6] != '0'))
{
output += "零";
}
break;
//百万位
case 7:
if(x[i] != '0')
{
output += convert(x[i]);
output += "佰";
}
else if(x[i] == '0' &&
(x[i + 1] != '0' || x[i + 2] != '0'
|| x[i + 3] != '0' || x[i + 4] != '0' || x[i + 5] != '0'))
{
output += "零";
}
break;
//十万位
case 6:
if(x[i] != '0')
{
output += convert(x[i]);
output += "拾";
}
else if(x[i] == '0' && (x[i + 1] != '0' || x[i + 2] != '0' ||
x[i + 3] != '0' || x[i + 4] != '0'))
{
output += "零";
}
break;
//万位
case 5:
if(x[i] != '0')
{
output += convert(x[i]);
output += "萬";
}
else
{
output += "萬";
}
break;
//千位
case 4:
if(x[i] != '0')
{
output += convert(x[i]);
output += "仟";
}
else if(x[i] == '0' && (x[i + 1] != '0' || x[i + 2] != '0'
|| x[i + 3] != '0'))
{
output += "零";
}
break;
//百位
case 3:
if(x[i] != '0')
{
output += convert(x[i]);
output += "佰";
}
else if(x[i] == '0' && (x[i + 1] != '0' || x[i + 2] != '0'))
{
output += "零";
}
break;
//十位
case 2:
if(x[i] != '0')
{
output += convert(x[i]);
output += "拾";
}
else if(x[i] == '0' && x[i + 1] != '0')
{
output += "零";
}
break;
//个位
case 1:
if(x[i] != '0')
{
output += convert(x[i]);
}
else if(x.length() == 1)
{
output += convert(x[i]);
}
break;
}
count--;
}
int j;
for(int k = 0;k < output.length();k++)
{
if((j = output.find("零零零")) != -1) output.erase(j,4);
if((j = output.find("零零")) != -1) output.erase(j,2);
if((j = output.find("億萬")) != -1) output.erase(j + 2,2);
if((j = output.find("零拾")) != -1) output.erase(j,2);
if((j = output.find("零萬")) != -1) output.erase(j,2);
if((j = output.find("零仟")) != -1) output.erase(j,2);
if((j = output.find("零佰")) != -1) output.erase(j,2);
if((j = output.find("零億")) != -1) output.erase(j,2);
}
cout << output << endl;
output = "";
}
return 0;
}

string convert(char number)
{
string str;
switch(number)
{
case '0':
str = "零";
break;
case '1':
str = "壹";
break;
case '2':
str = "貳";
break;
case '3':
str = "參";
break;
case '4':
str = "肆";
break;
case '5':
str = "伍";
break;
case '6':
str = "陸";
break;
case '7':
str = "柒";
break;
case '8':
str = "捌";
break;
case '9':
str = "玖";
break;
default:
cout << "ERROR!\n";
exit(1);
}
return str;
}
...全文
74 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sarlanori 2008-03-07
  • 打赏
  • 举报
回复
也不是很重要,就是不知道哪里出了问题,心里不舒服,老想着它
p0303230 2008-03-07
  • 打赏
  • 举报
回复
解决前面有0的情况
count = (int)x.length();
for(i = 0; i< x.length(); i++)
{
if(x[i] == '0') count--;
else break;
}
for(i;i < x.length();i++)
{


那就不知道咯

很重要吗?
Sarlanori 2008-03-07
  • 打赏
  • 举报
回复
hai040,luwenzuo,p0303230:我写的时候就没考虑判断非法数据,比如开头有零的情况,而且对输入数据的要求是整数>=0且<=2147483647。现在的问题是我上传到一个ACM网站后它给出了如下的错误:
與正確輸出不相符(line:11)
您的答案為: 壹佰零貳萬參仟�零肆
正確答案為: 壹佰零貳萬參仟零肆

出现了乱码,我想可能是编码上出现了问题(那是一个台湾的网站,用的繁体字),但我检查了几遍也没找到是哪里的问题,大家再帮我看看呢?
p0303230 2008-03-07
  • 打赏
  • 举报
回复
海啸 is my name
p0303230 2008-03-07
  • 打赏
  • 举报
回复
00100000问题更大
大前置 2008-03-07
  • 打赏
  • 举报
回复
我测试了
没什么问题啊

以下是我测试的结果:


/*
4887989756445546
玖拾柒億伍仟陸佰肆拾肆萬伍仟伍佰肆拾陸
546546
伍拾肆萬陸仟伍佰肆拾陸
564546
伍拾陸萬肆仟伍佰肆拾陸
546
伍佰肆拾陸
5456489897879987987879897987
柒拾捌億柒仟玖佰捌拾玖萬柒仟玖佰捌拾柒
5646544564879987798
肆拾捌億柒仟玖佰玖拾捌萬柒仟柒佰玖拾捌
564456458798794
陸拾肆億伍仟捌佰柒拾玖萬捌仟柒佰玖拾肆
546548978794456546
捌拾柒億玖仟肆佰肆拾伍萬陸仟伍佰肆拾陸
989784564566458456654987879
陸拾陸億伍仟肆佰玖拾捌萬柒仟捌佰柒拾玖
4565648989789787
捌拾玖億捌仟玖佰柒拾捌萬玖仟柒佰捌拾柒
54465654978
肆拾肆億陸仟伍佰陸拾伍萬肆仟玖佰柒拾捌
897
捌佰玖拾柒
*/
hai040 2008-03-07
  • 打赏
  • 举报
回复
出什么错?
测了一下没问题
另没去掉开头的0,像0100这种转后有点小问题

64,183

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧