1002.写出这个数

1.一开始没有注意到样例的大小,10的100次方的话,就算是长整型2^64也包含不下来。

第一次写的代码是这样的

#include<stdio.h> 
int main(){
    //1.采用%n的方法来筛选最后一个数,n 
    //2./n减少位数  
    //3.哨兵i统计位数 
    //4.哨兵j统计之后的数字位数
    //5.转换int型入字符型,**不能强制转换,强制转换只会变成相应的ASCII码
    //6.转换时使用stdlib.h库中的ITOA函数,itoa(inttype,变量,进制)
    //7.好像不需要转换成char,把数字转移到数组的下标里就可以了
    //8.建立数组,存入数字拼音
    //9.取模只能从个位开始取,该怎么从头开始取并打印呢。原本想的是用char然后reverse?
    //10.那挨个取模,存入数组里然后reverse?
    //11.存入数组里就可以通过位数来取模了
    int n;
    int i=0;
    int f=0;
    printf("输入这个数:");
    scanf("%d",&n);
    while(n!=0){
        i=i+n%10;
        n=n/10;
        f++;
    }
    char c[10][4]={"yi","er","san","si","wu","liu","qi","ba","jiu","shi"};
    int num[f];
    int d=0;
    while(i!=0){
        int f;
        f=i%10;
        num[d]=f;
        d++;
        i=i/10;
        }
    printf("%c",c[num[f-1]]);
    f=f-1; 
    while(f>=0){
        printf(" %c",c[num[f]][1]);
        f=f-1;
        }
    return 0;
} 

然而就算是除开样例,输入65536以内的数字,也没能出现理想的结果,为什么呢,8知道,明天再来看。

5.14.回来想单步调试,每次都软件崩溃,修改了定义数组的方式,内部加了括号,but,编译后运行结果是超出了int型范围,说起来为什么会返回超出int型的数值呢,return0啊,print也是print出来的char里面的东西啊

对数组的定义有问题

关于字符的一维数组可以是写作char c[10]=“string”;

也可以写作 char c[10]={‘s’,‘t’,‘r’,‘i’,'n','g'};

在这道题中,样例为10^100次方以内,10^9以内是在长整型的范围内,这种就只能直接以字符的形式录入。

核心就是sprintf()函数,

sprintf(char, "%d", int);将字符符号转换为相应的数字

之前耽搁了很长一段时间,这道题暂时先这样,回过头去看看基础编程的作业


猜你喜欢

转载自blog.csdn.net/weixin_38706535/article/details/80272534