pat乙级第二题 第一个测试点老是通不过,是为什么?

pat乙级第二题 第一个测试点老是通不过,是为什么?
代码写的不伦不类的不要见怪哈

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<stack>
#include<string>
using namespace std;
int main()
{
    string str;
    int sum=0;
    int num[110];
    int count = 0;
    stack<int>q;
    cin >> str;
    char pingyin[10][10] = { "ling","yi","er","san","si","wu","liu","qi","ba","jiu" };
    for (int i = 0; i < str.size(); i++)
    {
        num[i] = str[i] - '0';
        count++;
    }

    for (int i = 0; i < count; i++)
    {
        sum += num[i];
    }
    
    char str2[11];
    if (sum == 0) printf("%s\n",pingyin[sum]);
    while (sum % 10 != 0)
    {
        q.push(sum % 10);
        sum /= 10;
    }
    while (!q.empty())
    {
        if (q.size() == 1) printf("%s\n", pingyin[q.top()]);
        else printf("%s ", pingyin[q.top()]);
        q.pop();
    }
    return 0;
}

可能是下面的问题

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<stack>
#include<string>
using namespace std;
int main()
{
    string str;             //输入数字(字符串)
    int sum = 0;            //计算数字和
    int num[110];           //存储数字(数字)
    int count = 0;
    stack<int>q;            //存储数字和的每一位数字
    cin >> str;             //输入字符串
    char pingyin[10][10] = { "ling","yi","er","san","si","wu","liu","qi","ba","jiu" };
    for (int i = 0; i < str.size(); i++)        //转化每一位数字
    {
        num[i] = str[i] - '0';
        count++;                    //其实Count就是等于str.size()
    }

    for (int i = 0; i < count; i++)
    {
        sum += num[i];
    }

    char str2[11];
    if (sum == 0) printf("%s\n", pingyin[sum]);
    while (sum % 10 != 0)           //这里有一点问题,如果sum==1000,那一开始就会停下
    {
        q.push(sum % 10);           //存储最后一位
        sum /= 10;
    }
    while (!q.empty())              //输出
    {
        if (q.size() == 1) printf("%s\n", pingyin[q.top()]);
        else printf("%s ", pingyin[q.top()]);
        q.pop();
    }
    return 0;
}
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7509913
  • 这篇博客你也可以参考下:PAT C语言 1031 查验身份证 (15 分) 一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:
  • 除此之外, 这篇博客: PAT 打印沙漏(20 分)(题解)中的 注意右侧不用打印空格,否则格式错误。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • #include <stdlib.h>
    #include <stdio.h>
    #include <math.h>
    /*
    Created by HarvestWu on 2018/04/27.
    */
    using namespace std;
    int main()
    {
    	int N,count,an;
    	char c;
    	scanf("%d %c", &N, &c);
    	count = (int)sqrt(((double)N+1)/2);//一个完整三角形的行数
    	an = 2 * count - 1;//最后一行的个数
    	int left = 0,  right = an;
    	for (int i = 0; i < count; i++)
    	{
    		for (int j = 0; j < left; j++)
    			printf(" ");
    		for (int m = left; m < right; m++)
    			printf("%c", c);
    		left += 1;
    		right -= 1;
    		printf("\n");
    
    	}
    	left -= 1;
    	right += 1;
    	for (int i = 1; i < count; i++)
    	{
    		left -= 1;
    		right += 1;
    		for (int j = 0; j < left; j++)
    			printf(" ");
    		for (int m = left; m < right; m++)
    			printf("%c", c);
    		printf("\n");
    	}
    	printf("%d\n", N-2*count*count+1);
    	return 0;
    }