当前位置: 代码迷 >> 综合 >> PAT 1002 写出这个数 (20分)(有关第二结点报错问题)
  详细解决方案

PAT 1002 写出这个数 (20分)(有关第二结点报错问题)

热度:59   发布时间:2023-12-12 11:06:11.0

读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。

输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10^?100
输出格式:
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。

菜鸡版本:

#include <stdio.h>
void Pingyin(int num);
int length(int *p);int main()
{
    int sum = 0,i = 0,j=0,len=0;char num[100];int mod = 1,m[100];if(scanf("%s",&num)){
    while(num[i] != '\0'){
    sum += (num[i]-'0');i++;}}if(sum == 0){
    Pingyin(0);}else{
    while(0 != sum)  //原第二节点错误处{
    mod = sum%10;m[len] = mod;//4 1len++;sum = sum /10;}for(i=len-1;i>-1;i--){
    Pingyin(m[i]);if(0 != i)printf(" ");}}return 0;
}
void Pingyin(int n) //数值转化为拼音输出
{
    switch(n){
    case 0: printf("ling");break;case 1: printf("yi");  break;case 2: printf("er");  break;case 3: printf("san"); break;case 4: printf("si");  break;case 5: printf("wu");  break;case 6: printf("liu"); break;case 7: printf("qi");  break;case 8: printf("ba");  break;case 9: printf("jiu"); break;}
}

经测试:PAT1002第二个数据节点是10的整数倍,如果在求余,将式子转化出错时,会出现第二个节点一直校验不过!!!


大神版本:

总结:string中的方法
to_string();将数值转化为string
string s;
s.length();可以获得字符串长度

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string s;int sum=0;cin>>s;string str[10]={
    "ling","yi","er","san","si","wu","liu","qi","ba","jiu"};for(int  i=0;i<s.length();i++){
    sum  += (s[i]-'0');}string num = to_string(sum);for(int i=0;i<num.length();i++){
    cout<<str[num[i]-'046'];if(i != (num.length()-1))cout<<" ";}return 0;
}