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);将字符符号转换为相应的数字
之前耽搁了很长一段时间,这道题暂时先这样,回过头去看看基础编程的作业