鱼C论坛

 找回密码
 立即注册
查看: 1025|回复: 6

[已解决]1002 写出这个数

[复制链接]
发表于 2019-10-31 17:01:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

int main()
{
        int str[M],i,sum,j,a[M];
        sum=0;
        
        for (i=0;str[i]!='\n';i++){
                str[i]=getchar();
        }
        i--;
        j=i;
        
        do {
                sum+=str[i];
                i--;
        }while (i++==0);
        
        do{
        a[i]=sum%10;
        sum=sum/10;
        i++;
    }while(sum);
        
        do {
                switch (a[i]){//将数组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;
 } 



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


时间限制: 400 ms
内存限制: 64 MB
代码长度限制: 16 KB
最佳答案
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()来输入数字的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-10-31 17:02:14 | 显示全部楼层
输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10
&#8203;100
&#8203;&#8203;。
输出格式:
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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()来输入数字的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-1 14:57:01 | 显示全部楼层
emmmmm初学者,我自己写然后不知道.....
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-1 15:00:29 | 显示全部楼层
我只知道它从标准输入流读取字符,然后返回....
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-1 15:03:06 | 显示全部楼层
bin554385863 发表于 2019-10-31 21:42
-----------------------------------------------------------------------------
Windows PowerShell
...

所以请问getchar应该是怎么用呢,抱歉我是初学者,然后自己学不是很懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

getchar()是用来读取字符的,
不懂得可以回去查数或者百度
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-4 17:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表