这是一个PAT乙级考试试题,原题目是
这个题中最后求出所有位之和并用汉语拼音输出并不难,问题在于如何把超出范围的数字读取并处理,当时考虑了很久,尝试字符串等等一系列方法但后来的计算等一系列问题都感觉一团糟。
当天先把这个题放了一放,第二天突然想到用字符数组的方法,并成功解决了,在此记下。
代码如下:
#include<stdio.h>
#include<math.h>
void numprint(int);
int main(void)
{
int cnt=0,sum=0,digitnum=0;
int num,sum1,digit,x;
char n[110];
scanf("%s",&n);
while (n[cnt]){
num=n[cnt]-48;
sum+=num;
cnt++;
}
sum1=sum;
while (sum1){
digitnum++;
sum1/=10;
}
while(digitnum){
digit=sum/pow(10,digitnum-1);
numprint(digit);
x=pow(10,digitnum-1);
sum=sum%x;
digitnum--;
if(digitnum){
printf(" ");
}
}
}
void numprint(int num)
{
switch (num){
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;
}
}
利用ASCII码中数字是有序排列的特性,将字符数组中每一位以十进制处理并减去ASCII码表中‘0’的数值即为当前位置上的那个数字。