鱼C论坛

 找回密码
 立即注册
查看: 1569|回复: 9

[已解决]算数

[复制链接]
发表于 2021-3-31 15:46:08 | 显示全部楼层 |阅读模式

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

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

x
#include<stdio.h>
#include<string.h>
int main()
{
   unsigned long long  int i;
    int count=0,j,d=0;
    int k[10];
    char ch[10];
    scanf("%lld",&i);
    while(i!=0)
    {
        count=count+i%10;
        i=i/10;
    }
    d=0;
    while(count!=0)
    {
        k[d]=count%10;
            d++;
                        count=count/10;
    }
    k[d]='\0';
    j=d-1;

    for(j;j>=0;j--)
    {
          switch(k[j])
    {
        case 1:strcpy(ch,"yi");break;
        case 2:strcpy(ch,"er");break;
        case 3:strcpy(ch,"san");break;
        case 4:strcpy(ch,"si");break;
        case 5:strcpy(ch,"wu");break;
        case 6:strcpy(ch,"liu");break;
        case 7:strcpy(ch,"qi");break;
        case 8:strcpy(ch,"ba");break;
        case 9:strcpy(ch,"jiu");break;
        case 0:strcpy(ch,"ling");break;
}
        printf("%s ",ch);
    }
    return 0;
}
最佳答案
2021-4-2 00:12:07
你要看清楚,n小于 10的100次方
你能告诉我 unsigned long long 的取值范围吗?
#include <stdio.h>

int main(void) {
    const char *string[] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
    int ch;
    size_t sum = 0;
    while((ch = getchar()) != '\n') {
        if(ch == EOF) break;
        sum += ch - '0';
    }
    size_t reverse = 0;
    while(sum) {
        reverse = reverse * 10 + (sum % 10);
        sum /= 10;
    }
    ch = '\0';
    while(reverse) {
        printf("%c%s", ch, string[reverse % 10]);
        ch = ' ';
        reverse /= 10;
    }
    printf("\n");
    return 0;
}
屏幕截图 2021-03-31 154507.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-3-31 15:47:30 | 显示全部楼层
我不知道怎么回事,我输入1234567890987654321   输出jiu ling(90),当我输入的数字更大了,就发现输出有错误了,是不是因为我这个值太大,导致溢出了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-31 15:55:12 | 显示全部楼层
我试了没有报错,不如你把报错信息发出来看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-31 16:14:22 | 显示全部楼层
为啥我用vc2019把这个程序打了一遍,编译出来,错误了好多.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-31 18:06:20 | 显示全部楼层
错倒是没有报错,就是答案不对,比如上面哪个例子应该输出yi san wu,而我的输出yi er er ,但是我现在已经解决了(用一个字符数组去装这个数字)。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-1 22:00:02 | 显示全部楼层
啊这,这么大的数确定不用字符数组?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-2 00:12:07 | 显示全部楼层    本楼为最佳答案   
你要看清楚,n小于 10的100次方
你能告诉我 unsigned long long 的取值范围吗?
#include <stdio.h>

int main(void) {
    const char *string[] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
    int ch;
    size_t sum = 0;
    while((ch = getchar()) != '\n') {
        if(ch == EOF) break;
        sum += ch - '0';
    }
    size_t reverse = 0;
    while(sum) {
        reverse = reverse * 10 + (sum % 10);
        sum /= 10;
    }
    ch = '\0';
    while(reverse) {
        printf("%c%s", ch, string[reverse % 10]);
        ch = ' ';
        reverse /= 10;
    }
    printf("\n");
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-6 19:11:18 | 显示全部楼层
人造人 发表于 2021-4-2 00:12
你要看清楚,n小于 10的100次方
你能告诉我 unsigned long long 的取值范围吗?

可以啊,大佬,这个思路好啊,我想问一下,哪个const ch,为什么前面要加const,有什么用吗?还有哪个size_t sum,哪个size_t,是什么意思?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-6 21:33:07 | 显示全部楼层
严凯 发表于 2021-4-6 19:11
可以啊,大佬,这个思路好啊,我想问一下,哪个const ch,为什么前面要加const,有什么用吗?还有哪个siz ...

const 表示只读,如果你在编程的时候犯二了,编译器可以帮你检查出来,很管用的,^_^
size_t是一个类型
https://baike.so.com/doc/6788967-7005576.html
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-7 09:08:45 | 显示全部楼层
人造人 发表于 2021-4-6 21:33
const 表示只读,如果你在编程的时候犯二了,编译器可以帮你检查出来,很管用的,^_^
size_t是一个类型
...

大佬,去看看我的快乐链表那个帖子,我真的要被搞吐了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-21 19:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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