标题:一道题,超过一定的数运行结果就会不对,大佬看看哪里错了
只看楼主
流浪猪头
Rank: 2
等 级:论坛游民
帖 子:40
专家分:65
注 册:2018-7-23
结帖率:100%
已结贴  问题点数:18 回复次数:3 
一道题,超过一定的数运行结果就会不对,大佬看看哪里错了
题目:读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于10^100^。
输出格式:在一行内输出n的各位数字之和的每一位,拼音数字间有1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu


我的代码:
#include <cstdio>
int main()
{
    int n,sum=0;
    int b=10;
    scanf("%d",&n);
    while (n/10.0!=0)
    {
        sum=n%10+sum;
        n=n/10;
    }
    while(sum/b!=0)
    {
        b=b*10;
    }
    b=b/10;
    while (b!=1)
    {
        switch (sum/b)
        {
            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;
        }
        sum=sum%b;
        b=b/10;
    }
    switch (sum)
        {
            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;
        }
    return 0;
}
搜索更多相关主题的帖子: int sum case printf break 
2018-07-23 18:00
no1xijin
Rank: 9Rank: 9Rank: 9
来 自:江西
等 级:贵宾
威 望:20
帖 子:211
专家分:1207
注 册:2015-7-8
得分:3 
数值过大
C语言中int的取值范围为:-2147483648 ~ 2147483647

126邮箱联系方式:no1xijin@126. com
2018-07-23 18:36
kfyniriu
Rank: 6Rank: 6
等 级:侠之大者
威 望:9
帖 子:105
专家分:426
注 册:2018-7-6
得分:15 
int 的取值范围是-2147483648~2147483647

超长整数的话,建议用数组来实现
程序代码:
#include <stdio.h>
#include<string.h>

int main()
{
    char n[3000];
    int sum=0;
    int b=10,i;
    scanf("%s",n);
    for(i=0;i<strlen(n);i++)
        sum=(n[i]-48)+sum;  //n[i]-48,输入的数字对应的是ASCII码,需要-48
    /*while (n/10.0!=0)
    {
        sum=n%10+sum;
        n=n/10;
    }*/
    while(sum/b!=0)
    {
        b=b*10;
    }
    b=b/10;
    while (b!=1)
    {
        switch (sum/b)
        {
            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;
        }
        sum=sum%b;
        b=b/10;
    }
    switch (sum)
        {
            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;
        }
    return 0;
}

2018-07-23 18:54
流浪猪头
Rank: 2
等 级:论坛游民
帖 子:40
专家分:65
注 册:2018-7-23
得分:0 
666,谢了
2018-07-29 20:00



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-488775-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.231961 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved