1002 写出这个数 (20 分) C语言实现

#include<stdio.h>
int main(void)
{
	char num[101];
	int sum = 0;
	int i = 0;
	char c[10][10] = { "ling","yi","er","san","si","wu","liu","qi","ba","jiu" };
	num[i] = getchar();
	while (num[i] != '\n')
	{
		sum += num[i] - '0';
		i++;
		num[i] = getchar();
	}
	//printf("%d\n", sum);

	int total = sum;
	int j = 1;
	while (total > 0)
	{
		total /= 10;
		j *= 10;
	}
	j /= 10;
	int y;
	for (; j > 0; j /= 10)
	{
		y = sum;
		y /= j;
		sum %= j;
		printf("%s", c[y]);
		if (j > 1)
			printf(" ");
	}
	return 0;
}

1.利用字符串储存测试的超大数字并且每得到一个数就添加到sum变量中

利用getchar()来每次获得一个字符

字符需转化为整数类型——则用‘0’在ASC码来做基准 从而把字符重新转化为整数类型

循环条件利用输入最后是回车来判断

2.正向分解所得和

经典操作——应该要能立刻写出来

法一:利用循环来将数字每次/10 从而最终得到位数——但这样其实会多一位10(0的数量不能和数字的位数一样 而应该整体和数字位数一样 )

法二:可以利用strlen函数直接得到字符串长度

然后即可循环得到每一位数字

3.利用字符串数组来代替switch-case

利用字符串数组可以巧妙代替switch-case从而节省空间

上一篇:pta甲级1002 A+B for Polynomials(AC)


下一篇:hbase命令整理