鱼C论坛

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

[已解决]1002 写出这个数

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

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

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

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

  3. int main()
  4. {
  5.         int str[M],i,sum,j,a[M];
  6.         sum=0;
  7.        
  8.         for (i=0;str[i]!='\n';i++){
  9.                 str[i]=getchar();
  10.         }
  11.         i--;
  12.         j=i;
  13.        
  14.         do {
  15.                 sum+=str[i];
  16.                 i--;
  17.         }while (i++==0);
  18.        
  19.         do{
  20.         a[i]=sum%10;
  21.         sum=sum/10;
  22.         i++;
  23.     }while(sum);
  24.        
  25.         do {
  26.                 switch (a[i]){//将数组a中的数字逆向输出来
  27.             case 1 :printf ("yi");break;
  28.                         case 2 :printf ("er");break;
  29.                         case 3 :printf ("san");break;
  30.                         case 4 :printf ("si");break;
  31.                         case 5 :printf ("wu");break;
  32.                         case 6 :printf ("liu");break;
  33.                         case 7 :printf ("qi");break;
  34.                         case 8 :printf ("ba");break;
  35.                         case 9 :printf ("jiu");break;
  36.                         case 0 :printf ("ling");break;
  37.                 }//每两个输出之间用空格隔开,最后不加空格
  38.                 if (!i){
  39.                         printf ("\n");break;
  40.                 }
  41.                 else printf (" ");
  42.                 i--;
  43.         }while (i>=0);
  44.        
  45.         return 0;
  46. }
复制代码




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


时间限制: 400 ms
内存限制: 64 MB
代码长度限制: 16 KB
最佳答案
2019-10-31 21:42:41
本帖最后由 bin554385863 于 2019-11-1 00:06 编辑
  1. /*读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字*/
  2. #include <stdio.h>
  3. int func1(int num) //计算数字的权值之和
  4. {
  5.     int sum = 0;
  6.     if ((num >= __INT_MAX__)||(num <= 0))
  7.     {
  8.         sum = -1;
  9.     }
  10.     else
  11.     {
  12.         while (num != 0)
  13.             {
  14.                 int t = num % 10;
  15.                 num /= 10;
  16.                 sum += t;
  17.             }
  18.     }
  19.    
  20.     return sum;
  21. }
  22. void func2(int num) //变换写法
  23. {
  24.     if ((num >= __INT_MAX__)||(num <= 0))
  25.     {
  26.         printf("-1");
  27.     }
  28.     else
  29.     {
  30.         while (num != 0)
  31.         {
  32.             int t = num % 10;
  33.             switch (t)
  34.             {
  35.             case 0:
  36.                 printf("零 ");
  37.                 break;
  38.             case 1:
  39.                 printf("壹 ");
  40.                 break;
  41.             case 2:
  42.                 printf("贰 ");
  43.                 break;
  44.             case 3:
  45.                 printf("叁 ");
  46.                 break;
  47.             case 4:
  48.                 printf("肆 ");
  49.                 break;
  50.             case 5:
  51.                 printf("伍 ");
  52.                 break;
  53.             case 6:
  54.                 printf("陆 ");
  55.                 break;
  56.             case 7:
  57.                 printf("柒 ");
  58.                 break;
  59.             case 8:
  60.                 printf("捌 ");
  61.                 break;
  62.             case 9:
  63.                 printf("玖 ");
  64.             default:
  65.                 break;
  66.             }
  67.             num /= 10;
  68.         }
  69.     }
  70. }
  71. int main(int argc, char const *argv[])
  72. {
  73.     int a = 1;
  74.     while (1)
  75.     {
  76.         scanf("%d", &a);
  77.         if (a <= 0)
  78.         {
  79.             printf("程序结束");
  80.             break;
  81.         }
  82.         printf("%d的权值之和是: %d\n组成数字为: ", a, func1(a));
  83.         func2(func1(a));
  84.         printf("\n");
  85.     }

  86.     return 0;
  87. }
复制代码

-----------------------------------------------------------------------------
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()来输入数字的?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

发表于 2019-10-31 21:42:41 | 显示全部楼层    本楼为最佳答案   
本帖最后由 bin554385863 于 2019-11-1 00:06 编辑
  1. /*读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字*/
  2. #include <stdio.h>
  3. int func1(int num) //计算数字的权值之和
  4. {
  5.     int sum = 0;
  6.     if ((num >= __INT_MAX__)||(num <= 0))
  7.     {
  8.         sum = -1;
  9.     }
  10.     else
  11.     {
  12.         while (num != 0)
  13.             {
  14.                 int t = num % 10;
  15.                 num /= 10;
  16.                 sum += t;
  17.             }
  18.     }
  19.    
  20.     return sum;
  21. }
  22. void func2(int num) //变换写法
  23. {
  24.     if ((num >= __INT_MAX__)||(num <= 0))
  25.     {
  26.         printf("-1");
  27.     }
  28.     else
  29.     {
  30.         while (num != 0)
  31.         {
  32.             int t = num % 10;
  33.             switch (t)
  34.             {
  35.             case 0:
  36.                 printf("零 ");
  37.                 break;
  38.             case 1:
  39.                 printf("壹 ");
  40.                 break;
  41.             case 2:
  42.                 printf("贰 ");
  43.                 break;
  44.             case 3:
  45.                 printf("叁 ");
  46.                 break;
  47.             case 4:
  48.                 printf("肆 ");
  49.                 break;
  50.             case 5:
  51.                 printf("伍 ");
  52.                 break;
  53.             case 6:
  54.                 printf("陆 ");
  55.                 break;
  56.             case 7:
  57.                 printf("柒 ");
  58.                 break;
  59.             case 8:
  60.                 printf("捌 ");
  61.                 break;
  62.             case 9:
  63.                 printf("玖 ");
  64.             default:
  65.                 break;
  66.             }
  67.             num /= 10;
  68.         }
  69.     }
  70. }
  71. int main(int argc, char const *argv[])
  72. {
  73.     int a = 1;
  74.     while (1)
  75.     {
  76.         scanf("%d", &a);
  77.         if (a <= 0)
  78.         {
  79.             printf("程序结束");
  80.             break;
  81.         }
  82.         printf("%d的权值之和是: %d\n组成数字为: ", a, func1(a));
  83.         func2(func1(a));
  84.         printf("\n");
  85.     }

  86.     return 0;
  87. }
复制代码

-----------------------------------------------------------------------------
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()来输入数字的?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-1 14:57:01 | 显示全部楼层
emmmmm初学者,我自己写然后不知道.....
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-1 15:00:29 | 显示全部楼层
我只知道它从标准输入流读取字符,然后返回....
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

所以请问getchar应该是怎么用呢,抱歉我是初学者,然后自己学不是很懂
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

getchar()是用来读取字符的,
不懂得可以回去查数或者百度
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-1 07:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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