| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5835 人关注过本帖
标题:币值转换
取消只看楼主 加入收藏
三个人
Rank: 2
等 级:论坛游民
帖 子:54
专家分:40
注 册:2014-7-6
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:11 
币值转换
问题:

输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出为“cWdQbBai”元。

 输入格式:

输入在一行中给出一个不超过9位的非负整数。

 输出格式:

在一行中输出转换后的结果。注意“零”的用法必须符合中文习惯。
输入样例1:813227345
 输出样例1:iYbQdBcScWhQdBeSf
 输入样例2:6900
 输出样例2:gQjB
我的代码和思路:
#include<stdio.h>
#include<string.h>

int main(void)
{
  char s[10];
  int l,len,i,j;
  gets(s);        //用字符串处理。
  len=strlen(s);  //求长度
  l=len;          //用另一变量保存长度,以l来表示当前位数,即千位,百位等。
  
  for(i=0;i<len;i++,l--)
  {
      char c=s[i];
      switch(c)
          {
            case '0':c='a';break;
            case '1':c='b';break;
            case '2':c='c';break;
            case '3':c='d';break;
            case '4':c='e';break;
            case '5':c='f';break;
            case '6':c='g';break;
            case '7':c='h';break;
            case '8':c='i';break;
            case '9':c='j';break;
            default:break;
          }
    if(c=='a')         //0为特殊,单独判断。
    {
      if(l==5)
        printf("W");   //如果万位是0,输出w;
      else
      {
        for(i++,l--;i<len;i++,l--)   //否则,遍历之后的个个字符,是否都是‘0’,从而判断是否念0;
        {
          if(s[i]=='0')
          {
            if(l==5)
              printf("W");     //遍历中遇到万位是0,同上,且退出循环。
          }
          else
          {
            printf("a");
            i--;
        l++;
            break;
          }
        }
      }
    }
    else
    {
      printf("%c",c);             //非零则简单了。
      switch(l)
      {
        case 9:printf("Y");break;
        case 8:printf("Q");break;
        case 7:printf("B");break;
        case 6:printf("S");break;
        case 5:printf("W");break;
        case 4:printf("Q");break;
        case 3:printf("B");break;
        case 2:printf("S");break;
        default:break;
      }
    }
  }
  return 0;
}
评测不通过,某些测试节点答案错误,但我试了很多数据都能输出正确结果,希望有人能发现错误!
搜索更多相关主题的帖子: 英文字母 人民币 大写数字 中文 财务 
2014-08-13 11:34
三个人
Rank: 2
等 级:论坛游民
帖 子:54
专家分:40
注 册:2014-7-6
收藏
得分:0 
回复 2 楼 embed_xuel
试过,没问题
2014-08-13 11:41
三个人
Rank: 2
等 级:论坛游民
帖 子:54
专家分:40
注 册:2014-7-6
收藏
得分:0 
谁能用c写出正确代码贴上来也好,希望能对比一下
2014-08-13 12:49
三个人
Rank: 2
等 级:论坛游民
帖 子:54
专家分:40
注 册:2014-7-6
收藏
得分:0 
上网搜全都是用java写的,难道这个题目用c不能完成么,虽然情况是有很多。。。。。。。。。我已跪了
2014-08-13 12:55
三个人
Rank: 2
等 级:论坛游民
帖 子:54
专家分:40
注 册:2014-7-6
收藏
得分:0 
回复 6 楼 vvvcuu
真心搞不定,总是有一些特殊情况没法包括在算法里,,
你能试试这道题么。。
诚心求代码。
我实在想不出更好的算法了
2014-08-13 13:14
三个人
Rank: 2
等 级:论坛游民
帖 子:54
专家分:40
注 册:2014-7-6
收藏
得分:0 
回复 8 楼 embed_xuel
这个代码我最后找到了错误数据,而且不止一种。。。。。
改来改去还是有错误。
最后无奈放弃。。。。
2014-08-13 13:23
三个人
Rank: 2
等 级:论坛游民
帖 子:54
专家分:40
注 册:2014-7-6
收藏
得分:0 
额,还有一种错误数据是0;
输入0这个代码无法输出a;
我把这个改正后就。。。。额。。骗过了评测系统!!
貌似100000000这种错误数据不在评测节点里。。
这系统有点坑啊
2014-08-13 13:27
三个人
Rank: 2
等 级:论坛游民
帖 子:54
专家分:40
注 册:2014-7-6
收藏
得分:0 
最后努力结果!!
#include<stdio.h>
#include<string.h>

int main(void)
{
  char s[10];
  int l,len,i,j;
  gets(s);        //用字符串处理。
  len=strlen(s);  //求长度
  l=len;          //用另一变量保存长度,以l来表示当前位数,即千位,百位等。
  if(len==1&&s[0]=='0')
      printf("a");
  for(i=0;i<len;i++,l--)
  {
      char c=s[i];
      switch(c)
          {
            case '0':c='a';break;
            case '1':c='b';break;
            case '2':c='c';break;
            case '3':c='d';break;
            case '4':c='e';break;
            case '5':c='f';break;
            case '6':c='g';break;
            case '7':c='h';break;
            case '8':c='i';break;
            case '9':c='j';break;
            default:break;
          }
    if(c=='a')         //0为特殊,单独判断。
    {
      if(l==5)
      {
         if(s[i-1]!='0'||s[i-2]!='0'||s[i-3]!='0')
             printf("W");
      }
      else
      {
        for(i++,l--;i<len;i++,l--)   //否则,遍历之后的个个字符,是否都是‘0’,从而判断是否念0;
        {
          if(s[i]=='0')
          {
            if(l==5)
            {
                if(s[i-1]!='0'||s[i-2]!='0'||s[i-3]!='0')
                    printf("W");
            }     
          }
          else
          {
            printf("a");
            i--;
        l++;
            break;
          }
        }
      }
    }
    else
    {
      printf("%c",c);             //非零则简单了。
      switch(l)
      {
        case 9:printf("Y");break;
        case 8:printf("Q");break;
        case 7:printf("B");break;
        case 6:printf("S");break;
        case 5:printf("W");break;
        case 4:printf("Q");break;
        case 3:printf("B");break;
        case 2:printf("S");break;
        default:break;
      }
    }
  }
  return 0;
}
评测通过!100000000的问题解决了!yes!
2014-08-13 13:41
三个人
Rank: 2
等 级:论坛游民
帖 子:54
专家分:40
注 册:2014-7-6
收藏
得分:0 
回复 11 楼 embed_xuel
寻找问题再解决他也挺好,我不会迷信评测系统,我还会自己找错误,100000000我自己就找出来了
谢了
2014-08-13 13:43
三个人
Rank: 2
等 级:论坛游民
帖 子:54
专家分:40
注 册:2014-7-6
收藏
得分:0 
回复 13 楼 三个人
为什么?
2014-08-13 13:49
快速回复:币值转换
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013544 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved