如何接收并输出超出最大数字范围的数?

这是一个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’的数值即为当前位置上的那个数字。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值