PAT 1002 写出这个数
我的解法
#include<stdio.h>
#include<stdlib.h>
int pin[100]={};
int printpin(int i)
{
switch (i)
{
case 0:
printf("ling");
break;
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;
default:
break;
}
return 0;
}
int main()
{
long long num;
int sum=0;
int temp; //temp用来记录一位数字
int count=0; //计数器count,记录sum有多少位
int i=0;
scanf("%lld",&num);
while(num)
{
temp=num%10;
sum+=temp;
num/=10;
}
//printf("%d\n",sum);
while(sum)
{
pin[i]=sum%10;
i++;
sum=(sum-sum%10)/10;
}
count=i-1;
for(count;count>=0;count--)
{
printpin(pin[count]);
printf(" ");
}
return 0;
}
此题要求输入一串数字,求各位数和,再用拼音显示出来
我的想法是,定义一个long long类型的num,通过scanf输入,给num赋值,再利用循环,逐位的取余数,再累加,求出和,这样的做法也没错
后来我参考了其他人的方法,
char* bignumber=(char*)calloc(105,sizeof(char));
scanf("%s",bignumber);
int sum=0;
for(int i=0;i<strlen(bignumber);i++)
sum+=bignumber[i]-'0';
输入的一串数字设置为字符串,再通过循环依次减去0的ASCII码,得到数字,直接累加,计算出sum
与我的处理方法对比
scanf("%lld",&num);
while(num)
{
temp=num%10;
sum+=temp;
num/=10;
}
//printf("%d\n",sum);
while(sum)
{
pin[i]=sum%10;
i++;
sum=(sum-sum%10)/10;
}
我定义了long long类型的num,明显在时间复杂度与代码上相比,均要更加复杂
在求拼音的时候,我通过对pin[]数组的倒序遍历,调用printpin()函数,使用switch-case结构,来寻找对应的拼音
int printpin(int i)
{
switch (i)
{
case 0:
printf("ling");
break;
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;
default:
break;
}
return 0;
}
参考他人的方法,通过定义字符数组来存储10个拼音,操作起来更为简便
char sp[10][5]={“ling”,“yi”,“er”,“san”,“si”,“wu”,“liu”,“qi”,“ba”,“jiu”};
通过下标的对应,来寻找拼音
心得
这道题我的方法没有错误,只是最普通、最常见的思路,依次取末位数,再累加,求和后,也是依次取末位数,再通过switch-case结构来挑选。
通过参考代码
- 多位数求各位和:
利用字符串来存储,再通过下标,依次减去‘0’,累加,即得到各位数和
2.两组有序的有规律的数据,可通过数组对应数组来查找一一对应,不必要利用switch-case结构
来源:CSDN
作者:weixin_43631461
链接:https://blog.csdn.net/weixin_43631461/article/details/103648571