注册 登录
编程论坛 C语言论坛

pta有一个测试点过不去不去

Knightl8 发布于 2020-03-08 14:13, 4138 次点击
这是网址https://
只有本站会员才能查看附件,请 登录

麻烦各位大佬了
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(void)
{
    int count=0;
    char * key[]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
    char num[1000];
    scanf("%s",num);
    int index=1;
    int gewei = 0;
    for(int i=0;num[i]!='\0';i++)
    {
        count=count+((int)num[i]-48);
        if(count/index>0)
        {
            gewei++;
            index *=10;
        }
    }

   

    for(int i=gewei;i;i--)
    {
        int d=count/pow(10,i-1);
        printf("%s",key[d]);
        count = count-d*pow(10,i-1);
        if(count<=0)
        {
            printf("");
        }
        else
        {
            printf(" ");
        }
        
    }



   
    return 0;
}




[此贴子已经被作者于2020-3-8 19:39编辑过]

19 回复
#2
纯蓝之刃2020-03-08 17:03
printf(" ");
两个分号中间要有个空格。
#3
Knightl82020-03-08 17:49
回复 2楼 纯蓝之刃
我第一个是控制最后的,题意要求最后末尾不能有空格
#4
叶纤2020-03-08 18:04
把题目发过来啊?让大家盲猜吗。
#5
Knightl82020-03-08 18:10
回复 4楼 叶纤
第一行网址就是题目链接
#6
叶纤2020-03-08 18:51
Loading chunk 3 failed. (error: https://pta-static.)
无法连接服务器,请检查您的网络连接。
重新加载
访问备用线
百度查不了,算了(#-.-)我换个浏览器吧
#7
叶纤2020-03-08 19:18
程序代码:

1。把/*printf("%d\n",gewei);
  
    printf("%d\n",count);
*/去掉,因为让你输入一堆数字,然后打印拼音,
2。把system("pause");去掉,因为不确定机器会不会自己按回车显示答案

#8
Knightl82020-03-08 19:38
回复 7楼 叶纤
老哥,不好意思...
我发错了,上面是我vscode上的,下面上是提交的,就是有一个点过不去
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(void)
{
    int count=0;
    char * key[]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
    char num[1000];
    scanf("%s",num);
    int index=1;
    int gewei = 0;
    for(int i=0;num[i]!='\0';i++)
    {
        count=count+((int)num[i]-48);
        if(count/index>0)
        {
            gewei++;
            index *=10;
        }
    }

   

    for(int i=gewei;i;i--)
    {
        int d=count/pow(10,i-1);
        printf("%s",key[d]);
        count = count-d*pow(10,i-1);
        if(count<=0)
        {
            printf("");
        }
        else
        {
            printf(" ");
        }
        
    }



   
    return 0;
}
#9
forever742020-03-08 20:04
输入1234试一试?
#10
wmf20142020-03-08 20:08
在和为0的情况没考虑,所以只输入一个0时,你的代码没有输出。
下述代码提交正确:
程序代码:
#include <stdio.h>
void main()
{
    char a[101],*k[]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
    int i,j,b[10];
    scanf("%s",a);
    for(i=j=0;a[i];i++)j+=(a[i]-'0');
    if(!j)printf("%s\n",k[j]);
    else
    {
        for(i=0;j;j/=10)b[i++]=j%10;
        for(;i;i--)
        {
            if(i==1)printf("%s\n",k[b[i-1]]);
            else printf("%s ",k[b[i-1]]);
        }
    }
}
#11
叶纤2020-03-08 20:19
我用wandbox测试了一下他的代码,在gcc c语言中代码是不通过的,在gcc   c++语言中代码可以通过,不过警告一大堆
最严重的是char * key[]=
#12
Knightl82020-03-08 20:48
回复 10楼 wmf2014
我加了和为0,还是不行
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(void)
{
    int count=0;
    char * key[]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
    char num[1000];
    scanf("%s",num);
    int index=1;
    int gewei = 0;
    for(int i=0;num[i]!='\0';i++)
    {
        count=count+((int)num[i]-48);
        if(count/index>0)
        {
            gewei++;
            index *=10;
        }
    }

   
    if(count==0)
    {
        printf("ling");
    }
    else
    {
        
        for(int i=gewei;i;i--)
    {
        int d=count/pow(10,i-1);
        printf("%s",key[d]);
        count = count-d*pow(10,i-1);
        if(count<=0)
        {
            printf("");
        }
        else
        {
            printf(" ");
        }
        
    }

    }
   


   
    return 0;
}
#13
Knightl82020-03-08 20:48
回复 11楼 叶纤
我的代码吗?
#14
叶纤2020-03-08 21:15
程序代码:

对呀,这样改警告就没啦

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(void)
{
    int count=0;
    char  key[][100]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
    char num[1000];int a[100];
    scanf("%s",num);
    int index=1;
    int gewei = 0;
    for(int i=0;num[i]!='\0';i++)
    {
        count=count+((int)num[i]-48);
        if(count/index>0)
        {
            gewei++;
            index *=10;
        }
    }
   
    for(int i=gewei;i!=0;--i)
   { a[i]=count%10;
      count= count/10;
      }
      for(int i=1;i<=gewei;++i)
      {  printf("%s ",key[a[i]]);
         
          }printf("%c",8);   
    return 0;
}

#15
叶纤2020-03-08 21:24
如果要考虑0的情况加一句if语句就行了,如果不知加在哪,我可以帮忙
#16
Knightl82020-03-08 21:26
回复 14楼 叶纤
只有本站会员才能查看附件,请 登录
老哥,那为啥我的就没有警告呢
#17
叶纤2020-03-08 21:38
回复 16楼 Knightl8
你电脑没调试好呀,for(int i=gewei;i;i--)再看看你这一句,i都没长度直接减减了,标准上允许这样写吗?你用我的代码,如果要考虑0的情况你再加一句if。。。。
#18
Knightl82020-03-08 22:09
终于该对了
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(void)
{
    int count=0;
    char * key[]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
    char num[1000];
    scanf("%s",num);
    int index=1;
    int gewei = 0;
    for(int i=0;num[i]!='\0';i++)
    {
        count=count+((int)num[i]-48);
        if(count/index>0)
        {
            gewei++;
            index *=10;
        }
    }

   

    for(int i=gewei;i>0;i--)
    {
        int d=count/pow(10,i-1);
        printf("%s",key[d]);
        count = count-d*pow(10,i-1);
        if(i>1)
        {
            printf(" ");
        }
      
        
        
    }



    system("pause");
    return 0;
}
#19
Knightl82020-03-08 22:11
回复 17楼 叶纤
我的i等于数字总共有多少位呀,前面有长度的
#20
叶纤2020-03-08 22:31
那你18楼为什么要把for(int i=gewei;i;i--);改为for(int i=gewei;i>0;i--)呢?不就因为没长度限制吗?
1