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<iostream> #include<cstring> 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<strlen(st);i++){ n+=st[i]-'0'; } while(n) { a[q]=n%10; q++; n=n/10; } // cout<<py[a[q]];//这里错在哪了,因为没有-1,数组不是从对应相同的数开始 //应该从高位开始输出。 // for(int i=q-1;i>=0;i--) // cout<<" "<<py[a[i]]; // 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<iostream> #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<len;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<iostream> #include<stdio.h> #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<len;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 <stdio.h> #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; }
唯有学习才能求生