1002 写出这个数 (20分)

a = str[i] - '0'什么意思:

如果str里面存放的是数字字符的话就是转成其数值类型

比如说str[i]是'1',其实ascii码值为0x31,而'0'的ascii码是0x30,用str[i]-'0'就得到了1

1、size()函数:

c++中,在获取字符串长度时,size()函数与length()函数作用相同。 除此之外,size()函数还可以获取vector类型的长度。

 

2、sizeof():

 

sizeof()运算符用来求对象所占内存空间的大小。

 

要点:字符串的读数字。用数组选择是哪一个拼音

 

部分正确:

#include #include using namespace std; int main() { char py[10][10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"}; int a[10]; char st[100]; gets(st); //gets() 不被PAT支持。。改成cin.getline(st,100); int n=0; int q=0; for(int i=0;i){ n+=st[i]-'0'; } while(n) { a[q]=n%10; q++; n=n/10; } // cout<//这里错在哪了,因为没有-1,数组不是从对应相同的数开始 //应该从高位开始输出。 // for(int i=q-1;i>=0;i--) // cout<<" "<// for(int i=q-1;i>=0;i--) { cout<<py[a[i]]; if(i) cout<<" "; } return 0; }

 

多点测试    正确代码2:

链接:https://www.nowcoder.com/questionTerminal/2121c22523b94a0bad8e50c861a22723
来源:牛客网

#include
#include<string>
using namespace std;
int main()
{
    string s1;                 //String s = "abc" :s是存储在栈里bai。   

//先在栈中创建一bai个对String类的对象引用变量s,然du后查找栈中有没有存放"abc",如果没有,zhi则将"abc"存放进栈,并令s指向”abc”,如果已经有”abc” 则直接令s指向“abc”
getline(cin,s1);
if(s1=="0") cout<<"ling";          //关键点:0的处理 int len=s1.length(); int sum=0;//存放所有数位之和 for(int i=0;i){ sum+=s1[i]-'0';//累加每一位 } int num=0,ans[10];//num表示sum的位数 while(sum!=0){ //将sum中的每一位存到数组中,sum的低位存到ans[]的低位 ans[num]=sum%10; num++; sum/=10; } char change[10][5]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"}; for(int i=num-1;i>=0;i--){ cout<<change[ans[i]]; if(i!=0) cout<<" "; else cout<<endl; } return 0; }

 

 

。。。没找到问题所在

能通过单点测试的   正确代码:


#include
#include
#include<string.h>
int main()
{
//读取字符串
    char s[101];
//gets(s); //用gcc是可以的,用g++则编译错误,改用fgets()
//Xcode显示warning: this program uses gets(), which is unsafe
//网页直接error: ‘gets’ was not declared in this scope
scanf("%s",&s);
//字符串求和
    int len=strlen(s);
    int sum=0;
    for(int i=0;i)
    {
        sum=sum+s[i]-'0';
    }
 
//把sum的每一位数字存在数组k里
    int k[10]={0};
    int count=0;//统计sum的位数
    while(sum!=0)
     {
         k[count]=sum%10;
         count++;
         sum=sum/10;
     }
    
//按特定格式倒序输出
    char ci[10][5]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
    for(int i=count-1;i>=0;i--)
    {
        printf("%s",ci[k[i]]);
        if(i!=0)
        printf(" ");
    }
 
    return 0;
    
}

这个测试 0这个数时候是不通过的。
———————————————— 版权声明:本文为CSDN博主「a
-bit」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/eeeemon/article/details/106851911

 

多点测试可通的 正确代码1:

链接:https://www.nowcoder.com/questionTerminal/2121c22523b94a0bad8e50c861a22723
来源:牛客网

#include 
#include <string.h>
int main(void){
    char num[105];
    scanf("%s", num);
    int len = strlen(num);
    int sum = 0;
    for(int i = 0; i < len; i++){
        sum += num[i] - '0'; 
    }
    int bai = sum / 100;          
    int shi = sum / 10 % 10;
    int ge = sum % 10;
    char shu[10][5] = {"ling", "yi", "er", "san", "si",
                    "wu", "liu", "qi", "ba", "jiu"};
     
    if(bai != 0){
        printf("%s ", shu[bai]);
        printf("%s ", shu[shi]);
        printf("%s", shu[ge]);
    }
    else if(shi != 0){
        printf("%s ", shu[shi]);
        printf("%s", shu[ge]);
    }
    else printf("%s", shu[ge]);
 
 
    return 0;
}

 

 

 

你可能感兴趣的:(1002 写出这个数 (20分))