一开始那道题,我的思路就是用一个变量n来保存所输入的数,之后通过模10,除10运算来求得每一位上的数之和,最后将所求得的和进行模10,除10将每一位上的数放到数组arr中,通过switch case语句对应到相应的汉字表示中。代码如下。
#include<stdio.h>
#include<stdlib.h>
int main()
{
long int n;
int a, arr[100] = { 0 };
int s = 0,i=0;
scanf("%d", &n);
while ((n / 10) != 0)
{
a= n % 10;
s += a;
n = n / 10;
}
s+=n;
printf("%d\n",s);
while ((s / 10) !=0)
{
arr[i] = s % 10;
s = s / 10;
i++;
}
arr[i]=s;
for (; i>0; i--)
{
switch (arr[i])
{
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;
}
}
}
switch (arr[0])
{
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;
}
}
printf("\n");
system("pause");
return 0;
}
但是!!!通过编译运行发现,当输入的数字比较小时,运行结果没有问题。而当数字比较大时出现了问题。于是,考虑到溢出。用字符来表示输入的数,之后通过ASCII码值进行转换,修改后的代码如下
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
char c;
int s,arr[100]={0},i=0;
while((c=getchar())!='\n')
{
s+=(c-48);
}
while ((s / 10) !=0)
{
arr[i] = s % 10;
s = s / 10;
i++;
}
arr[i]=s;
for (; i>0; i--)
{
switch (arr[i])
{
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;
}
}
}
switch (arr[0])
{
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;
}
}
printf("\n");
system("pause");
return 0;
}
通过这个题,学习到溢出问题的处理