Cyzyt 发表于 2019-10-31 17:01:42

1002 写出这个数

读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
#include <stdio.h>
#define M 101

int main()
{
        int str,i,sum,j,a;
        sum=0;
       
        for (i=0;str!='\n';i++){
                str=getchar();
        }
        i--;
        j=i;
       
        do {
                sum+=str;
                i--;
        }while (i++==0);
       
        do{
      a=sum%10;
      sum=sum/10;
      i++;
    }while(sum);
       
        do {
                switch (a){//将数组a中的数字逆向输出来
            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;
                        case 0 :printf ("ling");break;
                }//每两个输出之间用空格隔开,最后不加空格
                if (!i){
                        printf ("\n");break;
                }
                else printf (" ");
                i--;
        }while (i>=0);
       
        return 0;
}



请教为什么系统会说我段错误啊?
什么叫段错误?
然后怎么改?{:10_266:}


时间限制: 400 ms
内存限制: 64 MB
代码长度限制: 16 KB

Cyzyt 发表于 2019-10-31 17:02:14

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

bin554385863 发表于 2019-10-31 21:42:41

本帖最后由 bin554385863 于 2019-11-1 00:06 编辑

/*读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字*/
#include <stdio.h>
int func1(int num) //计算数字的权值之和
{
    int sum = 0;
    if ((num >= __INT_MAX__)||(num <= 0))
    {
      sum = -1;
    }
    else
    {
        while (num != 0)
            {
              int t = num % 10;
              num /= 10;
              sum += t;
            }
    }
   
    return sum;
}
void func2(int num) //变换写法
{
    if ((num >= __INT_MAX__)||(num <= 0))
    {
      printf("-1");
    }
    else
    {
      while (num != 0)
      {
            int t = num % 10;
            switch (t)
            {
            case 0:
                printf("零 ");
                break;
            case 1:
                printf("壹 ");
                break;
            case 2:
                printf("贰 ");
                break;
            case 3:
                printf("叁 ");
                break;
            case 4:
                printf("肆 ");
                break;
            case 5:
                printf("伍 ");
                break;
            case 6:
                printf("陆 ");
                break;
            case 7:
                printf("柒 ");
                break;
            case 8:
                printf("捌 ");
                break;
            case 9:
                printf("玖 ");
            default:
                break;
            }
            num /= 10;
      }
    }
}
int main(int argc, char const *argv[])
{
    int a = 1;
    while (1)
    {
      scanf("%d", &a);
      if (a <= 0)
      {
            printf("程序结束");
            break;
      }
      printf("%d的权值之和是: %d\n组成数字为: ", a, func1(a));
      func2(func1(a));
      printf("\n");
    }

    return 0;
}

-----------------------------------------------------------------------------
Windows PowerShell
版权所有 (C) Microsoft Corporation。保留所有权利。

尝试新的跨平台 PowerShell https://aka.ms/pscore6

PS E:\Users\admin\Documents\VScode> & 'c:\Users\admin\.vscode\extensions\ms-vscode.cpptools-0.26.1\debugAdapters\bin\WindowsDebugLauncher.exe' '--stdin=Microsoft-MIEngine-In-cv3ionhq.a5d' '--stdout=Microsoft-MIEngine-Out-e3yhoppl.gmx' '--stderr=Microsoft-MIEngine-Error-0wkylms4.3ze' '--pid=Microsoft-MIEngine-Pid-xh4qj31w.not' '--dbgExe=E:\My Program\Others\MinGW\bin\gdb.exe' '--interpreter=mi'
9999      
9999的权值之和是: 36
组成数字为: 陆 叁
356
356的权值之和是: 14
组成数字为: 肆 壹
123588
123588的权值之和是: 27
组成数字为: 柒 贰
0
程序结束
PS E:\Users\admin\Documents\VScode>
========================================================
我很好奇楼主是从哪里学的用getchar()来输入数字的?

Cyzyt 发表于 2019-11-1 14:57:01

emmmmm初学者,我自己写然后不知道.....

Cyzyt 发表于 2019-11-1 15:00:29

我只知道它从标准输入流读取字符,然后返回....

Cyzyt 发表于 2019-11-1 15:03:06

bin554385863 发表于 2019-10-31 21:42
-----------------------------------------------------------------------------
Windows PowerShell
...

所以请问getchar应该是怎么用呢,抱歉我是初学者,然后自己学不是很懂{:10_250:}

bin554385863 发表于 2019-11-1 15:44:17

Cyzyt 发表于 2019-11-1 15:03
所以请问getchar应该是怎么用呢,抱歉我是初学者,然后自己学不是很懂

getchar()是用来读取字符的,
不懂得可以回去查数或者百度
页: [1]
查看完整版本: 1002 写出这个数