PAT 乙级 2/95 写出这个数

花费大概四个小时做得一道题 说来是在太菜了。 主要是总结一些自己不会的知识点

#define use _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
	
	
	int sum = 0;
	int j = 0;
	int flag=0;
	char *a[10] = {"ling","yi","er","san","si","wu","liu","qi","ba","jiu" };
	int num[100] = {};
	int num1[100] = {};
	char string[100] = {};
	//fgets(string,100,stdin);
	//gets_s(string);
	scanf("%s", string);
	int len = strlen(string);
	for (int i = 0; i < len; i++)
	{
		num[i] = string[i] - '0';
	}
	
	for (int i = 0; i < len; i++)
	{
		sum += num[i];
	}                                         
	while (sum)
	{
		num1[j++] = sum % 10;
		sum /= 10;

	} 
	for (int k = j - 1; k >= 0; k--)
	{
		flag++;
		switch (num1[k])
		{
		case 0: if (flag == 1) printf("%s", a[0]); else printf(" %s", a[0]); break;
		case 1: if(flag==1) printf("%s", a[1]);    else printf(" %s",a[1]);  break;
		case 2: if (flag == 1) printf("%s", a[2]); else printf(" %s", a[2]); break;
		case 3: if (flag == 1) printf("%s",a[3]);  else printf(" %s", a[3]); break;
		case 4: if (flag == 1) printf("%s",a[4]);  else printf(" %s", a[4]); break;
		case 5: if (flag == 1) printf("%s",a[5]);  else printf(" %s", a[5]); break;
		case 6: if (flag == 1) printf("%s", a[6]); else printf(" %s", a[6]); break;
		case 7: if (flag == 1) printf("%s", a[7]); else printf(" %s", a[7]); break;
		case 8: if (flag == 1) printf("%s", a[8]); else printf(" %s", a[8]); break;
		case 9: if (flag == 1) printf("%s", a[9]); else printf(" %s", a[9]); break;
		}
	}
	getchar();
	return 0;
}

1.刚开始我是找如何从键盘上读入这么大的一个数字的办法,int ,long long 普通定义变量的数据类型肯定不行。尝试着字符串输入 这里我忽视了可以使用scanf("%s",xx),这个方法。

2.字符数字转数字  atoi 只能转一定范围的较小的整数。直接使用 字符数字-‘0’较好。

3.取一个未知整数的各个位数和字符串数组的定义。

发布了51 篇原创文章 · 获赞 9 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/suntingsheng123/article/details/104876560